home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / graphics / rotor20.zip / ROTOR20.M2 < prev    next >
Text File  |  1993-08-25  |  292KB  |  5,999 lines

  1.             
  2.             --------------------------------------------------------------------
  3.             ROTOR(tm)    Keytroke processing                              7 - 01
  4.             --------------------------------------------------------------------
  5.  
  6.  
  7.             keystroke
  8.             handlers   : ROTOR(tm) features two separate keystroke-handlers:
  9.                          the menu-bar, and a background processor.
  10.  
  11.  
  12.             menu-bar   : When a key is pressed, it is first sent to the
  13.                          menu-bar.  There, each menu-element inspects it in
  14.                          turn, until the key is recognized and processed. Most
  15.                          keystrokes go un-recognized at this stage, as the
  16.                          menu-element are few, and each responds to only one or
  17.                          two keys.
  18.  
  19.             background
  20.             processor  : Unprocessed keystrokes are passed-on to the background
  21.                          processor, which interprets it according to a table of
  22.                          default definitions.  The remaining pages of this
  23.                          chapter enumerate these defaults in great detail.
  24.  
  25.  
  26.             overrides :  The important point to remember is that the menu-bar
  27.                          gets "first-dibs" at any keystroke.  Its interpretation
  28.                          of a keystroke command may differ from that of the
  29.                          background processor, thereby overriding the key's
  30.                          default definition.
  31.  
  32.                          To illustrate, let us consider the S-key:  Normally, by
  33.                          default, [S] is the [SHAPE] toggle key.  However, when
  34.                          the "Pose" menu is active, the [SHRINK] button steps-in
  35.                          and grabs all S-keypresses before they can reach the
  36.                          background-processor.  The S-key becomes the [SHRINK]
  37.                          toggle.
  38.  
  39.             hidden
  40.             menu       : When the menu-bar is hidden, all keystrokes are sent
  41.                          directly to the background processor.
  42.  
  43.             default
  44.             keyboard
  45.             command    : The following pages list the default keyboard-command
  46.                          definitions in complete detail.
  47.  
  48.  
  49.             
  50.             --------------------------------------------------------------------
  51.             ROTOR(tm)    Keyboard defaults : Top-row keys                 7 - 02
  52.             --------------------------------------------------------------------
  53.  
  54.             top row
  55.             keys 1..9  : These menu-selection number keys are not handled by
  56.                          the background processor.
  57.  
  58.             top row
  59.             0-key.     : The menu-bar visibility toggle.
  60.  
  61.             shifted
  62.             top row
  63.             keys       : These "short-cut" keys provide direct access to
  64.                          important pop-up menus:
  65.  
  66.                          shift-` = [~] : for access to all param pulse toggles.
  67.                          shift-1 = [!] : to select a font file file.
  68.                          shift-2 = [@] : to load a clip-library file.
  69.                          shift-3 = [#] : for access to all other pop-up menus.
  70.                          shift-4 = [$] : to save a screen-area to a PCX file.
  71.                          shift-5 = [%] : to select a parameter for editing.
  72.                          shift-6 = [^] : to select a diagnostic monitor.
  73.                          shift-7 = [&] : to load a PCX/PCC file.
  74.                          shift-8 = [*] : the status-bar toggle. (not a pop-up)
  75.                          shift-9 = [(] : to change the program interface options
  76.                          shift-0 = [)] : for simultaneous access to all switches
  77.                          shift-\ = [|] : to select and execute a macro.
  78.  
  79.                          All other pop-up menus can be accessed indirectly via
  80.                          the [#] button.
  81.  
  82.             
  83.             --------------------------------------------------------------------
  84.             ROTOR(tm)    Keyboard defaults : Function keys                7 - 03
  85.             --------------------------------------------------------------------
  86.  
  87.             function
  88.             keys
  89.             F1..F10   :  These keys form a substitute numeric keypad.
  90.                          Press F1 for 1, F2 for 2, etc...
  91.  
  92.                          An internal variable called "scan-step" takes on the
  93.                          value of the F-key pressed.  For instance, when F3 is
  94.                          struck, the scan-step becomes 3.
  95.  
  96.  
  97.             shifted
  98.             function
  99.             keys       : The effect of these keys depends on the state of the
  100.                          [Scroll-Lock] toggle.
  101.  
  102.                          When it is OFF, they alter the motor_step parameter.
  103.                          When it is ON,  they change the zone_step's value.
  104.  
  105.                          When the user presses a shifted function-key, the step
  106.                          parameter takes on the value computed by multiplying
  107.                          the current scan-step by the shift-Fkey's number.
  108.  
  109.                          The following example illustrates:
  110.                          Lets say we want a motor_step value of 12.
  111.                          To accomplish this, we press F4 then shift-F3.
  112.                          The F4-press sets scan-step to 4.  When shift-F3 is
  113.                          pressed,  the scan-step is multiplied by 3, and the
  114.                          result (12) is assigned to the motor_step parameter.
  115.  
  116.             
  117.             --------------------------------------------------------------------
  118.             ROTOR(tm)    Keyboard defaults : Keypad                       7 - 04
  119.             --------------------------------------------------------------------
  120.  
  121.             Scroll
  122.             Lock       : The keypad keys are affected by the status of the
  123.                          [Scroll-Lock] toggle.  When [Scroll-Lock] is OFF,
  124.                          they operate on the current cursor.  When it is ON,
  125.                          the keypad keys become zone-manipulation commands.
  126.  
  127.             arrow keys : Use the keypad arrow and corner keys to steer a
  128.                          travelling zone or cursor.  These keys actually push
  129.                          the zone or cursor forward, when it is stationary.
  130.  
  131.             ctrl-keypad
  132.             corner keys: Use these to send an item into a corner of its range.
  133.  
  134.             ctrl-left
  135.             ctrl-right : These combination-keys adjust the width of the zone.
  136.                          (regardless of the [Scroll-Lock] state)
  137.  
  138.             [CenterKey],
  139.             [ins]      : Both keys perform the same centering function.  When
  140.                          [Scroll-Lock] is OFF, they center the cursor within its
  141.                          surrounding zone.  When it is ON, they center the zone
  142.                          within the work-area.
  143.  
  144.             [del]      : Use this key to delete some portion of the work area.
  145.  
  146.             [+]/[-]    : Use these to size the cursor or the zone.
  147.  
  148.             [*]        : This is the status-bar toggle.
  149.  
  150.             ctrl-PrtSc : Use this command to print some portion of the screen.
  151.  
  152.             [Esc]      : The is the exit key. Use it to abort the current
  153.                          ROTOR(tm) session and exit to the DOS prompt.
  154.  
  155.             [backspace]: The reverse command.  This key reverses the current
  156.                          object's direction of travel.  It also reverses the
  157.                          rotation direction, if the object is spinning.
  158.  
  159.             [=]        : This key pop-up a menu of cursor (or zone) sizing
  160.                          commands.
  161.  
  162.             other      : The following keys are also affected by scroll-lock:
  163.                          the shifted function-keys (see preceeding section),
  164.                          and also the [G] and [P] letter-keys which are used to
  165.                          toggle the [Go] and [Pave] switches.
  166.  
  167.             Num Lock   : Keep this status-key OFF at all times.
  168.  
  169.             
  170.             --------------------------------------------------------------------
  171.             ROTOR(tm)    Keyboard defaults : Letter keys                  7 - 05
  172.             --------------------------------------------------------------------
  173.  
  174.             letter keys: Most letter keys are linked to object-toggles.
  175.                          Some are reserved for specific commands.
  176.  
  177.                          The following table shows the default assigments:
  178.                          ------------------------------------------------------
  179.                          key | object  | toggle-function or {command}
  180.                              | toggle  |
  181.                          ------------------------------------------------------
  182.                          [A] : >>>>>>> : {adapter  modes menu.}
  183.                          [B] : BACK    : the mesh/opaque pattern toggle.
  184.                          [C] : CURSOR  : the cursor visibility toggle.
  185.                          [D] : DRAW    : for a self-stamping object.
  186.                          [E] :           -not in use-
  187.                          [F] : FILL    : for a filled-shape.
  188.                          [G] : GO      : for a moving cursor or zone.
  189.                          [H] : HUES    : for upper spectrum colors.
  190.                          [I] : INVERT  : for an inverted shape.
  191.                          [J] : JOIN    : for a shape linked to the prior one(s).
  192.                          [K] : >>>>>>> : {to kill the current object.}
  193.                          [L] : LINE    : for an outlined shape.
  194.                          [M] :           -not in use-
  195.                          [N] : >>>>>>> : {to add a new object.}
  196.                          [O] : OFFSET  : for an off-center shape.
  197.                          [P] : PAVE    : for grid-clamped motion.
  198.                          [Q] : QUAKE   : for a jittered shape.
  199.                          [R] : ROLL    : for a rotated shape.
  200.                          [S] : SHAPE   : the shape visibility-toggle.
  201.                          [T] : THICK   : for thick shape outline.
  202.                          [U] : USE|    : for dashed lines.
  203.                          [V] : VEER    : for travel at a titled angle.
  204.                          [W] : >>>>>>  : {simulated black-and-white mode.}
  205.                          [X] : XHATCH  : for patterned-fills.
  206.                          [Y] : YHATCH  : for patterned-backgrounds.
  207.                          [Z] : ZONE    : the zone visibility-toggle.
  208.  
  209.             alt/ctrl
  210.             keys       : When a key is a linked to an object-toggle, all the
  211.                          associated combination keys are also recognized.
  212.                          The following example illustrates:
  213.  
  214.                          [F]          : toggles [FILL]
  215.                          [Alt-F]      : for FILL-modes menu.
  216.                          [Ctrl-F]     : to pulse the fillcolor.
  217.                          [Alt-Ctrl-F] : to set the fillcolor pulse-mode.
  218.  
  219.             
  220.             --------------------------------------------------------------------
  221.             ROTOR(tm)    Keyboard defaults : Miscellanious keys           7 - 06
  222.             --------------------------------------------------------------------
  223.  
  224.  
  225.             Ctrl-C     : When DOS BREAK is turned OFF, the ctrl-C command
  226.                          toggles the CLIP switch.  When BREAK is ON, ctrl-C
  227.                          aborts program execution.
  228.  
  229.             Ctrl-E     : Use this command to free-up some heap memory.  This is
  230.                          accomplished by removing from memory either a font, a
  231.                          clip-library,  or a script.
  232.  
  233.             Ctrl-K     : Use this command to "kill" all objects except the
  234.                          current one.
  235.  
  236.             Ctrl-P     : Use this command to stamp a shape, clip, text or
  237.                          PCX-image.
  238.  
  239.  
  240.             ["]        : This is the mouse and object synchronization toggle.
  241.  
  242.             [?]        : This key pops-up our address, phone, and copyright
  243.                          notice.
  244.             square
  245.             brackets   : Use these keys to edit the prior or next object,
  246.                          instead of the current one.
  247.  
  248.             [Spacebar] : The PAUSE bar.
  249.  
  250.             [Enter]    : The CONTINUE command.
  251.  
  252.  
  253.             
  254.             --------------------------------------------------------------------
  255.             ROTOR(tm)    Keyboard Limitations                             7 - 07
  256.             --------------------------------------------------------------------
  257.  
  258.             object
  259.             toggles not
  260.             handled    : The background keyboard processor does not handle
  261.                          the following object-toggles:
  262.  
  263.                          [B] : BEZIER  : for flowery shapes
  264.                          [C] : CLIP    : for a clipping zone.
  265.                          [C] : CRUSH   : to adjust the shape's proportions.
  266.                          [P] : PUTC    : for cursor-stamping.
  267.                          [S] : SHRINK  : for scaled down shapes.
  268.  
  269.                          The object-toggles listed above can be manipulated
  270.                          via the [):Switches] pop-up menu.
  271.                          
  272.                          Ctrl-C can be used to toggle [CLIP], if the DOS break
  273.                          has been turned OFF.
  274.  
  275.             commands
  276.             not
  277.             handled    : The background keyboard processor does not support
  278.                          the following commands (the corresponding keys serve
  279.                          other functions) :
  280.  
  281.                          + the shape $ave command.
  282.                          + the text and filename editing commands.
  283.                          + the tagging operations.
  284.                          + the Show-pattern toggle.
  285.                          + the No-Color toggle.
  286.                          + the printer-port setup and paper-feed controls.
  287.  
  288.             keys not
  289.             processed  : The background keyboard processor does not process
  290.                          the following keys:
  291.  
  292.                          + the scanner keys [<],[>]
  293.                          + the top row number keys 1..9.
  294.  
  295.             automatic
  296.             shift      : For the sake of convenience, ROTOR(tm) automatically
  297.                          converts [/] to [?],
  298.                                   ['] to ["],
  299.                               and [`] to [~].
  300.  
  301.                          In other words, it is not necessary to hold the
  302.                          shift-key down when pressing the [?], ["] and [~] keys.
  303.  
  304.             
  305.             --------------------------------------------------------------------
  306.             ROTOR(tm)    DEF file format                                  8 - 01
  307.             --------------------------------------------------------------------
  308.  
  309.  
  310.                          When the user saves a shape, ROTOR(tm) writes it to a
  311.                          file with a DEF extension.  This is a human-readable
  312.                          text file, which can be examined and modified with any
  313.                          editor or word-processor.
  314.  
  315.                          This chapter describes in great detail the structure
  316.                          of these DEF files.  Armed with this knowledge, users
  317.                          can proceed to write DEF files for their own shapes. A
  318.                          simple example is included which illustrates how this
  319.                          is done.
  320.  
  321.             file
  322.             types      : There are two kinds of DEF files:  polyfiles, and
  323.                          clipfiles.  A polyfile defines a shape formed by a
  324.                          single polygon.  Clipfiles are used to describe more
  325.                          complex shapes composed of multiple polygons.
  326.  
  327.             polyfile
  328.             format     : A polyfile file consists of:
  329.  
  330.                          + a file-type identifier.         (the 1st line)
  331.                          + followed by a radius dimension  (the 2nd line)
  332.                          + followed by a vertex count      (the 3rd line)
  333.                          + followed by a list of coordinate records
  334.                                                    (the rest of the file)
  335.  
  336.             clipfile
  337.             format     : The clipfile format is as follows:
  338.  
  339.                          + a file-type identifier.         (the 1st line)
  340.                          + followed by a radius dimension  (the 2nd line)
  341.                          + followed by a command count     (the 3rd line)
  342.                          + followed by a pixel count       (the 4th line)
  343.                          + followed by a list of coordinate records
  344.                                                    (the rest of the file)
  345.             
  346.             header
  347.             data       : The leading data items, such as the file-type
  348.                          identifier, the radius dimension, and the various
  349.                          counts, all consist of:
  350.  
  351.                          + a number.
  352.                          + followed by an optional label.
  353.  
  354.                          example:   3     clipfile
  355.                                     12288 radius
  356.                                     262   commands
  357.                                     18    pixels
  358.                                     |      |
  359.                                     |      +---- optional labels
  360.                                     +----------- numbers
  361.  
  362.                          The first data-item in a DEF file is a file-type
  363.                          indicator.
  364.  
  365.                          For polyfiles, it is:  1 polyfile
  366.                          For clipfiles, it is:  3 clipfile
  367.  
  368.                          The next data-item is a radius specification.  This
  369.                          radius defines an imaginary circle centered at the
  370.                          origin.  The points defined by the coordinate records
  371.                          which follow must fall within this imaginary circle.
  372.                          The maximum allowable radius is 32767.
  373.  
  374.                          Count data-items follow. In a polyfile, a vertex count
  375.                          is given. In a clipfile, command and pixel counts are
  376.                          specified.  The number of coordinate records in the
  377.                          file must agree with these counts.
  378.  
  379.             
  380.             coordinate
  381.             records    : Each  coordinate record consists of:
  382.  
  383.                          + a record number
  384.                          + a X coordinate value
  385.                          + a Y coordinate value
  386.                          + a coordinate code
  387.                          + an optional label
  388.  
  389.                          example:
  390.                          +------------------------------- record number
  391.                          |      +------------------------ X coordinate
  392.                          |      |        +--------------- Y coordinate
  393.                          |      |        |     +--------- coordinate code
  394.                          |      |        |     |    +---- optional label
  395.                          |      |        |     |    |
  396.                          2    28377    16384   9 PolyPt
  397.  
  398.                          The elements of a coordinate record must be separated
  399.                          from each other by at least one space character.
  400.  
  401.                          No two records should have the same number.  To
  402.                          guarantee this, it is a good idea to list them in
  403.                          sequential order.
  404.  
  405.                          The coordinate values must not exceed the defining
  406.                          radius for the shape.
  407.  
  408.                          The following coordinate codes are recognized:
  409.  
  410.                           2 Pixel       <--- for pixel points
  411.                           8 PolyStart   <--- for the 1st point in a polygon
  412.                          10 PolyEnd     <--- for the last point in a polygon
  413.                           9 PolyPt      <--- for other polygon points
  414.  
  415.             
  416.             sample
  417.             file       : This is the DEF file for a simple upward-pointing
  418.                          equilateral triangle:
  419.  
  420.                          1 polyfile
  421.                          32767 radius
  422.                          3 vertices
  423.                          1        0   -32767   8 PolyStart
  424.                          2    28377    16384   9 PolyPt
  425.                          3   -28377    16383  10 PolyEnd
  426.  
  427.             optional
  428.             labels     : All the identifying labels are optional.  They are
  429.                          only included for readability purposes. The preceeding
  430.                          sample file can be re-written as follows:
  431.  
  432.                          1
  433.                          32767
  434.                          3
  435.                          1        0   -32767   8
  436.                          2    28377    16384   9
  437.                          3   -28377    16383  10
  438.  
  439.                          This stripped down version is not as comprehensible as
  440.                          the fleshed out one, but it occupies less disk space.
  441.  
  442.                          The DEF files created by ROTOR(tm) always include
  443.                          labels.
  444.  
  445.             miscellaneous
  446.             notes      :
  447.                          Please note that blank lines are not allowed anywhere.
  448.  
  449.                          All numeric values must be integers in the
  450.                          range -32767..+32767  (no decimal points)
  451.  
  452.             
  453.             --------------------------------------------------------------------
  454.             ROTOR(tm)    DEF files : coordinates specification            8 - 02
  455.             --------------------------------------------------------------------
  456.  
  457.             coordinate
  458.             specification
  459.  
  460.                        : To define a shape, we use a coordinate system with
  461.                          2 perpendicular axis (X and Y).  The point where the
  462.                          axis cross is the 'origin', with coordinates (0,0).
  463.  
  464.                          The following diagram illustrates how a diamond-shape
  465.                          can be defined:
  466.  
  467.  
  468.  
  469.                                                +Y
  470.  
  471.                                                 |
  472.                                                 + #1 (0,2)
  473.                                               / | \
  474.                                             /   +   \
  475.                                           /     |     \
  476.                              #4 (-2,0)  /     (0,0)     \  #2 (2,0)
  477.                            -X <--+----+----+----*----+----+----+--> +X
  478.                                         \       |       /
  479.                                           \     +     /
  480.                                             \   |   /
  481.                                               \ | /
  482.                                                 + #3 (0,-2)
  483.                                                 |
  484.  
  485.                                                -Y
  486.  
  487.                          There are 4 vertices. Each is defined by its position
  488.                          relative to the origin.
  489.  
  490.                          We note that all of the vertices are within a 2-unit
  491.                          radius of the origin.
  492.  
  493.                          The shape itself is centered around the origin.  This
  494.                          is always a good idea.
  495.  
  496.                          If you look closely, you will notice that we have
  497.                          numbered the vertices  (from #1 to #4).
  498.                          For consistency's sake, numbering should always be
  499.                          done in a clockwise fashion, starting somewhere near
  500.                          12 o'clock.
  501.  
  502.                          The DEF file corresponding to this shape can easily be
  503.                          written:
  504.  
  505.                          1 polyfile
  506.                          2 radius
  507.                          4 vertices
  508.                          1        0        2   8 PolyStart
  509.                          2        2        0   9 PolyPt
  510.                          3        0       -2   9 PolyPt
  511.                          4       -2        0  10 PolyEnd
  512.  
  513.                          Its a polyfile, because the diamond can be described
  514.                          by a single polygon.  All the vertices are within a
  515.                          2-unit radius around the origin, and therefore the
  516.                          radius is 2.  There are 4 vertices.  They are listed
  517.                          in the numerical order.  The first vertex always has a
  518.                          PolyStart code, and the last one must be labelled
  519.                          PolyEnd. The others are PolyPts.
  520.  
  521.             radius
  522.             specification
  523.  
  524.                        : The second line of all DEF files contains a radius
  525.                          value.  This is the radius of a circle, centered at
  526.                          the origin, which encloses all of shapes vertices.
  527.  
  528.                          It is extremely important that all vertices fall
  529.                          within this circle.  When this condition is not
  530.                          satisfied, the shape cannot be displayed properly.
  531.  
  532.                          This enclosing circle should fit fairly tightly
  533.                          around the shape it encloses.  Do not make it many
  534.                          times larger than the shape.  You do not want your
  535.                          shape to be dwarfed by the enclosing circle.
  536.  
  537.                          The radius value is actually a measure of the
  538.                          amount of detail in a shape.  Simple shapes like
  539.                          the diamond above can have a small radius.  Complex
  540.                          designs with lots of nooks and crannies require
  541.                          a larger radius.
  542.  
  543.  
  544.             graphing
  545.             a shape    : When defining a new shape, consider the following
  546.                          suggestions:
  547.  
  548.                          Begin with a piece of graph paper. Draw your design
  549.                          onto it, as large as possible. Let it fill the page.
  550.                          Your shape must consist of one or several polygons.
  551.                          It is best if the polygons do NOT overlap. Try to keep
  552.                          the number of vertices down to a minimum. Plot these
  553.                          vertices to graph-line intersections. Some shifting
  554.                          and compromising may be required. Now Draw the X and Y
  555.                          axis, so that the origin ends up near the center of
  556.                          your design. Use a compass to determine an appropriate
  557.                          enclosing radius. Number the vertices, and label each
  558.                          one with its coordinates.  Write the DEF file using
  559.                          the resulting information.
  560.  
  561.  
  562.             
  563.             --------------------------------------------------------------------
  564.             ROTOR(tm)    DEF files :  'house' example                     8 - 03
  565.             --------------------------------------------------------------------
  566.  
  567.  
  568.                                             +Y
  569.  
  570.                                              :
  571.                                              : #1 (0,3)
  572.                                             /\
  573.                                           /  : \
  574.                                         /    :   \
  575.                                       /      :     \
  576.                                     /        :       \
  577.                      #5 (-3,0)    / #6(-2,0) : #7(2,0) \    #2 (3,0)
  578.               -X ............... +...+-------*------+...+................ +X
  579.                                  |   |       :      |   |
  580.                                  |   +--------------+   |
  581.                                  |  #9(-2,-1): #8(2,-1) |
  582.                      #4 (-3,-2)  +----------------------+   #3 (3,-2)
  583.                                              :
  584.                                              :
  585.  
  586.                                             -Y
  587.  
  588.  
  589.                          The `house' symbol shown above is formed by two
  590.                          overlapping polygons, one for the house outline, the
  591.                          other for the window frame.  The corresponding DEF
  592.                          file is easily written:
  593.  
  594.                          3 clipfile
  595.                          5 radius
  596.                          9 commands
  597.                          0 pixels
  598.                          1        0        3   8 PolyStart
  599.                          2        3        0   9 PolyPt
  600.                          3        3       -2   9 PolyPt
  601.                          4       -3       -2   9 PolyPt
  602.                          5       -3        0  10 PolyEnd
  603.                          6       -2        0   8 PolyStart
  604.                          7        2        0   9 PolyPt
  605.                          8        2       -1   9 PolyPt
  606.                          9       -2       -1  10 PolyEnd
  607.  
  608.                          It's a clipfile, because there are several polygons.
  609.                          All the vertices are at least within a 5-unit radius
  610.                          around the origin.  A smaller radius of 4 might do,
  611.                          but we can't quite tell for sure, so to be safe, we
  612.                          use a value of 5.  There are 9 vertices, and therefore
  613.                          9 'commands'.  There are no pixels.  The vertices are
  614.                          listed in numerical order.
  615.  
  616.             
  617.             --------------------------------------------------------------------
  618.             ROTOR(tm)    Troubleshooting: mouse trouble                   9 - 01
  619.             --------------------------------------------------------------------
  620.  
  621.                          When a mouse isn't functioning correctly, it usually
  622.                          isn't working at all:  no visible screen presence,
  623.                          no response to moves and clicks.  We explore here the
  624.                          possible causes of such mouse trouble.
  625.             missing
  626.             mouse
  627.             driver     : If your mouse doesn't work with any of your programs,
  628.                          chances are that its mouse driver is either missing or
  629.                          improperly installed.
  630.  
  631.                          The mouse driver is a little program which must be
  632.                          loaded into memory to enable other programs to
  633.                          communicate with the mouse.  When it is absent, the
  634.                          computer gets the impression that it lacks a mouse,
  635.                          even when there is one attached.
  636.  
  637.                          Fix : Customize your system so that the mouse driver is
  638.                          automatically loaded when you boot your system. If
  639.                          named MOUSE.COM, the driver you should be inserted into
  640.                          the AUTOEXEC.BAT file.  If named MOUSE.SYS, it should
  641.                          be included in the CONFIG.SYS file.  Please refer to
  642.                          your mouse manual for specific detailed instructions.
  643.  
  644.             incompatible
  645.             mice       : If your mouse works fine with other programs, but is
  646.                          nowhere to be seen within ROTOR(tm), you may be
  647.                          experiencing some sort of compatibility problem.
  648.                          ROTOR(tm) expects a Microsoft-compatible mouse.  Make
  649.                          sure that this is what you have.
  650.  
  651.             disabled
  652.             mouse      : Before jumping to an incompatibility diagnosis, make
  653.                          sure that the mouse was not simply disabled by
  654.                          ROTOR(tm) itself.  Press shift top-row 9 to pop-up
  655.                          the options menu, and if the 'mouse' option is OFF,
  656.                          toggle if back ON!
  657.  
  658.             mouse
  659.             off-screen : An invisible mouse may be simply one which is hidden
  660.                          off-screen.  Fix: Try shifting the mouse about!
  661.  
  662.             mouse
  663.             droppings  : The term 'mouse droppings' describes a trail of tiny
  664.                          rectangular mouse footprints.  This kind of mouse
  665.                          malfunction is the result of faulty programming.
  666.                          ROTOR(tm) should be free of such defects.  If you
  667.                          experience this problem, please notify us at once.
  668.  
  669.             frozen
  670.             mouse      : This is bad news!  When the mouse becomes unresponsive
  671.                          to user movements, yet remains visible on screen,
  672.                          something seriously wrong has happened, usually
  673.                          something completely unrelated to the mouse itself.
  674.                          Fix : None!  You'll have to reboot!
  675.             
  676.             --------------------------------------------------------------------
  677.             ROTOR(tm)    Troubleshooting: memory trouble                  9 - 02
  678.             --------------------------------------------------------------------
  679.  
  680.             parity
  681.             errors     : Memory chip failures are caused by power surges or
  682.                          power interruptions.  When they occur, they are
  683.                          instantly detected by the hardware,  and a 'parity
  684.                          error' message is displayed on the screen.
  685.  
  686.                          Fix : When you experience a parity error, simply turn
  687.                          your computer off, and then back on.  That may be all
  688.                          that is required.  Or it may turn out that some chip
  689.                          actually got physically damaged, in which case you'll
  690.                          have to replace it.
  691.  
  692.             shortages  :
  693.                          Memory chips are very reliable.  They are not prone to
  694.                          malfunctioning.  The biggest problem you are likely to
  695.                          experience is one of availability.  In other words,
  696.                          your system may experience a shortage of memory at
  697.                          some critical moment.
  698.  
  699.                          ROTOR(tm) makes every possible effort to keep this from
  700.                          happening.  It never uses more memory than it needs,
  701.                          and is constantly freeing-up unused blocks. And, when
  702.                          available, it accesses EMS or XMS memory areas.
  703.  
  704.                          When a memory shortage occurs, ROTOR(tm) usually
  705.                          recovers gracefully by cancelling the command that led
  706.                          to it.  An informative  'not enough memory' warning
  707.                          message is then issued.
  708.  
  709.  
  710.             insufficient
  711.             free RAM   : ROTOR(tm) requires a minimum of 425K of free RAM to
  712.                          run.  It automatically aborts itself when this minimum
  713.                          is not available.
  714.  
  715.                          Fixes : Remove all TSR utility programs from memory.
  716.                          Reduce the number of DOS buffers in your CONFIG.SYS
  717.                          file.  Install more memory, if your machine is not
  718.                          fully loaded.
  719.  
  720.             heap
  721.             shortages  : The heap is a 64K block of memory which is
  722.                          automatically set aside for ROTOR(tm) use.  It is
  723.                          included in the initial 425K requirement.
  724.  
  725.                          The limited heap space is shared by numerous program
  726.                          components.  Fonts, clips, scripts, menus, and shapes
  727.                          all compete against each other for heap memory.
  728.                          When the demand for heap space exceeds the supply, a
  729.                          memory error occurs.
  730.  
  731.             
  732.             script     : When a memory shortage occurs during a script-load,
  733.                          ROTOR(tm) does not crash. It simply stops reading the
  734.                          script, issues an error message, and then proceeds with
  735.                          normal program initialization.  Later, you'll find that
  736.                          some macros do not work correctly, but this is to be
  737.                          expected.
  738.  
  739.                               Example:  error on line 233: not enough memory
  740.  
  741.                               In the example above, all script statements beyond
  742.                               and including the 233rd line of the script file
  743.                               are not read into memory.
  744.  
  745.             fonts      : Fonts cannot be partially loaded.  When a selected
  746.                          font is larger than the available heap space, ROTOR(tm)
  747.                          rejects it.  The heap itself is 64K-wide, so fonts
  748.                          larger than 64K are automatically rejected.  As the
  749.                          actual amount of unused heap rarely exceeds 50K, fonts
  750.                          in the 50K to 64K range usually suffer the same fate.
  751.  
  752.                          The selected font must be loaded into a single
  753.                          monolithic memory-block.  This requirement further
  754.                          increases the chances of a font-rejction, as the
  755.                          largest available block may be significantly smaller
  756.                          than the total amount of heap available, due to
  757.                          fragmentation.
  758.  
  759.  
  760.             clips      : In an effort to reduce the memory requirements of clip
  761.                          libraries, ROTOR(tm) never loads more than 32 clips at
  762.                          a time.  But even such a partial set may be more than
  763.                          what the heap can accomodate.   So clip-libraries do
  764.                          occasionally cause a 'not enough memory' error.
  765.  
  766.  
  767.             shapes     : Most shapes occupy a relatively small section of the
  768.                          heap, and are therefore unlikely to cause trouble.
  769.                          Some, such as Clip, Clipbits, and DEF shapes, can be
  770.                          rather large, and as a result, are prone to suffering
  771.                          memory shortages.
  772.  
  773.                          When such a shortage occurs, ROTOR(tm) trashes the
  774.                          requested shape, and defaults to a simple square-shape
  775.                          instead.
  776.  
  777.                          The number of shapes which may be present on screen
  778.                          simultaneously is limited by the available heap.
  779.                          ROTOR(tm) automatically cancels `new-shape' requests
  780.                          when the free heap reaches the 4K low-mark.
  781.  
  782.  
  783.             menu bar   : The menu-bar elements are dynamically allocated onto
  784.                          the heap.  Their memory requirements are low, and
  785.                          so they are unlikely to cause trouble.  When a
  786.                          shortage occurs, the menu is not completely destroyed.
  787.                          Instead, it is reduced to whatever elements could be
  788.                          allocated.
  789.             
  790.             fixing
  791.             heap
  792.             shortages  : The heap size is fixed at 64K.  It cannot be expanded.
  793.                          So heap shortages can only avoided by careful
  794.                          management.  The 'Heap detail' diagnostic menu enables
  795.                          us to monitor the heap.  And the [^E] command (press
  796.                          Ctrl-E)  can be used to selectively unload a font,
  797.                          clip-library or script, thereby freeing-up valuable
  798.                          heap space.
  799.  
  800.  
  801.             unrecoverable
  802.             errors     : In certain situations, the heap can actually become
  803.                          unrecoverably corrupted by a complex-shape.  When this
  804.                          happens, ROTOR(tm) issues a warning:
  805.  
  806.                                'Corrupted shape! Please reboot.'
  807.  
  808.                          Fix : Do as you are told:  reboot your computer:
  809.                          Turn it off and then back on, or simply press
  810.                          Ctrl-Alt-Del.
  811.  
  812.  
  813.             
  814.             --------------------------------------------------------------------
  815.             ROTOR(tm)    Troubleshooting: EMS/XMS                         9 - 03
  816.             --------------------------------------------------------------------
  817.  
  818.             EMS        : EMS is an acronym for 'Expanded Memory system'. It's
  819.                          a bank switching memory expansion scheme for 8088
  820.                          machines which was devised by Lotus, Intel and
  821.                          Microsoft.
  822.  
  823.             XMS        : The XMS label is applied to the upper memory of
  824.                          80286 machines and above.  The XM part stands for
  825.                          'eXtended Memory'.
  826.  
  827.                          XMS memory can often be configured as EMS memory.
  828.                          Machines with a NEAT BIOS can allocate some memory as
  829.                          EMS, and keep the rest as XMS.
  830.  
  831.             EMS/XMS
  832.             drivers are
  833.             required   : Special memory-management software is necessary to
  834.                          activate EMS and XMS memory areas.  When the required
  835.                          drivers are missing, the memory is unusable.
  836.  
  837.                          The EMS driver is usually called EMS.SYS or EMM40.SYS,
  838.                          or something similar.
  839.  
  840.                          The XMS driver that comes with DOS is HIMEM.SYS.
  841.  
  842.                          The drivers are automatically loaded by DOS when they
  843.                          are placed in the CONFIG.SYS file.
  844.  
  845.             avoid old
  846.             drivers    : ROTOR(tm) requires up-to-date memory-drivers:
  847.                          The EMS driver must conform to the LIM 4.0 standard.
  848.                          The XMS driver must abide by XMS 2.0
  849.  
  850.             EMS/XMS
  851.             usage      : When available and accessible, upper-memory areas
  852.                          are regularly requisitioned by ROTOR(tm).
  853.  
  854.                          For instance, when a pop-up menu is called-up, the
  855.                          background screen is saved there.
  856.  
  857.                          PCX images are loaded to upper-memory-buffers,
  858.                          and when conversions are necessary, they are also
  859.                          performed there.
  860.  
  861.                          Ditto for image processing at printing-time.
  862.                          Ditto for text-bitmap construction.
  863.  
  864.                          The big advantage of high-memory is that when it is
  865.                          available, it is usually very plentiful, and therefore,
  866.                          unlikely to get used-up.  This is a great convenience
  867.                          when working with large color images, as these can
  868.                          encompass several megabytes.
  869.  
  870.             
  871.             CMM        : When EMS/XMS are not available, or simply not
  872.                          functional, all of the above mentioned activities
  873.                          are executed in conventional memory, if some is
  874.                          left-over.  ( CMM = Conventional MeMory )
  875.  
  876.             VMM        : When the RAM resources are also depleted,  ROTOR(tm)
  877.                          activates its built-in Virtual Memory Manager, which
  878.                          uses disk-space as a memory area.  This device is
  879.                          intended as a last-resort option.  It is rather
  880.                          sluggish, and the temporary files it creates are
  881.                          a nuisance.
  882.  
  883.             pop-up
  884.             menus      : When neither EMS/XMS nor CMM are available, pop-up
  885.                          menus reach into the heap for background saves.
  886.                          If the heap itself is not free, then the background
  887.                          may simply NOT be saved.
  888.                          
  889.             EMS vs XMS :
  890.                          Please note that EMS is slightly preferable to XMS.
  891.                          The XMS driver requires a 64K frame for buffer
  892.                          operations.  This is an additional 64K above and
  893.                          beyond the 425K minimum memory requirement for
  894.                          ROTOR(tm).  The EMS driver does not require any
  895.                          additional memory.
  896.  
  897.             diagnostic
  898.             menu       : To monitor your memory resources, use the diagnostic
  899.                          'Free Memory' menu.  It reports on the heap, CMM, EMS
  900.                          and XMS.  When a 0K value is shown, it indicates
  901.                          unavailable memory.
  902.  
  903.  
  904.             
  905.             --------------------------------------------------------------------
  906.             ROTOR(tm)    Troubleshooting: object trouble                  9 - 04
  907.             --------------------------------------------------------------------
  908.  
  909.  
  910.                          The great flexibility which ROTOR(tm) offers can
  911.                          sometimes lead to confusing situations where the
  912.                          program appears to malfunction.
  913.  
  914.                          All the problems discussed in this section fall in this
  915.                          category.
  916.  
  917.             frozen
  918.             program    : Sometimes the program seems to be "stalled".  The main
  919.                          object is frozen and nothing you do helps bring it back
  920.                          to life.
  921.  
  922.                          Fix: Most likely, the object is in a 'paused' state.
  923.                          To resume normal animation, simply press the [ENTER]
  924.                          key. It toggles the [PAUSE] switch OFF. (The space bar
  925.                          turns [PAUSE] ON).
  926.  
  927.             lost
  928.             object     : This is an object which has travelled off-screen.
  929.                          Usually, when an object disappears beyond a screen
  930.                          edge, it does not go very far, and therefore can easily
  931.                          be retrieved with a few arrow-keystrokes.
  932.  
  933.                          But is also quite possible for an object to travel
  934.                          great distances into the imaginary plane which extends
  935.                          the screen surface.  It can then become rather
  936.                          difficult to locate.  The best policy, in such
  937.                          situations, is to use the [INS] centering command to
  938.                          bring the object back into view.
  939.  
  940.                          The worst case scenario consists of a lost shape in a
  941.                          lost zone.  It is best handled by first centering the
  942.                          zone (press [INS] while [ScrollLock] is ON), then the
  943.                          shape (toggle [ScrollLock] and press [INS] again).
  944.  
  945.             hidden
  946.             object     : Of course, an invisible object is not necessarily a
  947.                          lost one.  It may simply be a hidden one.  To resolve
  948.                          any doubts, check the status of visibility toggles:
  949.                          [Shape], [Cursor], [Zone]
  950.  
  951.             tiny
  952.             shape      : Even a visible shape can be difficult to spot, when it
  953.                          is shrunken down to a tiny speck.  Also, DOT and single
  954.                          vertex shapes are naturally harder to notice.
  955.  
  956.                          The point that we are trying to make is that 'just
  957.                          because you don't see doesn't mean it ain't there!'.
  958.  
  959.  
  960.             
  961.             --------------------------------------------------------------------
  962.             ROTOR(tm)    Troubleshooting:  Error handling                 9 - 05
  963.             --------------------------------------------------------------------
  964.  
  965.  
  966.             robust
  967.             program    : ROTOR(tm) is a well-crafted program which has been
  968.                          thoroughly tested and debugged.  So it is not prone to
  969.                          crashes or other rude forms of behavior.
  970.  
  971.                          It does however, periodically find itself in situations
  972.                          where it cannot satisfactorily execute the user's
  973.                          wishes.  When this happens, it does not throw a fit.
  974.                          It simply cancels the order received, takes whatever
  975.                          recovery steps may be necessary, and issues an
  976.                          informative error message to warn the user.  Most
  977.                          importantly, the program continues functioning
  978.                          smoothly, instead of returning the user to the DOS
  979.                          prompt.
  980.  
  981.             error
  982.             messages   : Error messages are shown on the top half of the menu
  983.                          bar.  They interrupt all program animation.
  984.                          To get rid of the message, the user must press a key
  985.                          or mouse button.  The message is then removed, and
  986.                          program activities resume normally.
  987.  
  988.                          Please note that no other special action is required on
  989.                          the part of the user.  This is due to the fact that
  990.                          ROTOR(tm)'s error messages are not instructions, but
  991.                          rather simple explanatory warnings.
  992.  
  993.             process
  994.             messages   : Many messages are not error messages at all, but simply
  995.                          informative statements designed to keep the user
  996.                          abreast of internal processes.  Such messages
  997.                          differ from others in that they do not require a
  998.                          continuation keypress.
  999.  
  1000.             script
  1001.             syntax
  1002.             errors    :  Before the program actually begins, error messages may
  1003.                          appear at the top of the screen identifying invalid
  1004.                          statements in the script source file. All such script
  1005.                          error messages are of the form:
  1006.  
  1007.                                  error on line ###: <message>
  1008.  
  1009.                          For a full discussion of these errors, please look-up
  1010.                          the Programming chapter of this manual.
  1011.  
  1012.             
  1013.             --------------------------------------------------------------------
  1014.             ROTOR(tm)    Troubleshooting: Selected error messages         9 - 06
  1015.             --------------------------------------------------------------------
  1016.  
  1017.             possible
  1018.             file I/O
  1019.             errors     : These occur when reading or writing files, such as
  1020.                          fonts, clips, DEF-shapes, PCX-images, etc...
  1021.  
  1022.                          error:                      | fix:
  1023.                          ----------------------------+--------------------------
  1024.                          file not found or unopened  | Insert correct disk.
  1025.                          disk full                   | Free-up some disk space.
  1026.                          disk write protected        | Remove write-protect tab
  1027.                          drive not ready             | Close the drive door.
  1028.                          io error ##                 | Undetermined error.
  1029.  
  1030.             possible
  1031.             font
  1032.             problems   : Cannot handle fonts larger than 64K.
  1033.                          Undetermined font problem.
  1034.  
  1035.             printing
  1036.             problems   : Before printing, make sure your printer is powered ON,
  1037.                          paper-ready, and on-line.  And remember the following
  1038.                          limitations:
  1039.  
  1040.                          Dot-matrix printing is not supported.
  1041.                          Cannot print CGA 4-color images.
  1042.                          Cannot print off-screen areas!
  1043.  
  1044.             bad DEF
  1045.             shapes     : The DEF file reader performs some rudimentry checks
  1046.                          on the data received.  It detects the following errors:
  1047.  
  1048.                          Missing PolyStart
  1049.                          Missing LineStart
  1050.  
  1051.             reading
  1052.             PCX files  : Poorly-constructed PCX files cause errors.
  1053.                          ROTOR(tm) detects the following PCX-shortcomings:
  1054.  
  1055.                          bad palette.
  1056.                          missing palette.
  1057.                          cannot determine image type.
  1058.                          internal error
  1059.                          Not a PCX file
  1060.                          unidentified error ##
  1061.  
  1062.             saving to
  1063.             a PCX file : When the save-operation fails, a generic 'Bad Save'
  1064.                          message is issued.  Usually, the failure is
  1065.                          caused by a lack of sufficient disk space.
  1066.  
  1067.  
  1068.             
  1069.             --------------------------------------------------------------------
  1070.             ROTOR(tm)    Troubleshooting: Selected process messages       9 - 07
  1071.             --------------------------------------------------------------------
  1072.  
  1073.             PCX
  1074.             processing : Some phases of PCX image-processing are slow and
  1075.                          time-consuming.  To comfort the user during the
  1076.                          resulting lulls, ROTOR(tm) issues a informative
  1077.                          explanatory messages, such as:
  1078.  
  1079.                          Reading <imagefile> ...
  1080.                          converting from 4-color image takes a while ...
  1081.                          converting image to n-colors takes a while ...
  1082.                          converting palette takes a while ...
  1083.                          fixing image aspect ratio ...
  1084.                          image buffer not compatible w/display mode. Reloading..
  1085.  
  1086.             scanning a
  1087.             clip       : The clip-scanning process is also slow.  To make the
  1088.                          wait more endurable, the following process reports are
  1089.                          issued:
  1090.  
  1091.                          Scanning the clip. Please wait
  1092.                          PASS1 complete
  1093.                          PASS2 complete: Polys:# PolyPts:# Pixels:# check:##
  1094.                          PASS3 complete: Polys:# PolyPts:# Pixels:# check:##
  1095.  
  1096.  
  1097.  
  1098.  
  1099.             
  1100.             --------------------------------------------------------------------
  1101.             ROTOR(tm)    Troubleshooting: Bug detection                   9 - 08
  1102.             --------------------------------------------------------------------
  1103.  
  1104.             fatal
  1105.             polygon
  1106.             errors     : The polygon management routines responsible for most
  1107.                          shape drawing operations include some simple integrity
  1108.                          checks. When a polygon becomes corrupted due to buggy
  1109.                          code, these routines produce cryptic error messages,
  1110.                          and then the program usually dies a painful and
  1111.                          horrible death.  As ROTOR(tm ) has been extensively
  1112.                          debugged, it is quite unlikely that you will ever
  1113.                          encounter such messages.  But just in case you do, we
  1114.                          list them here:
  1115.  
  1116.                          DeclaredSize allocation error
  1117.                          Out-of-range index ##
  1118.                          bad isTriangle allocation
  1119.                          bad isQuad allocation
  1120.  
  1121.             fatal
  1122.             printing
  1123.             messages   : Similar error-checking is performed during printing
  1124.                          operations.  The following error messages may appear:
  1125.  
  1126.                          error destroying DitherBuf ##
  1127.                          error destroying ScaleBuf  ##
  1128.                          error destroying ImageBuf  ##
  1129.  
  1130.  
  1131.             PCX
  1132.             checks     : Ditto for PCX processing:
  1133.  
  1134.                          error at pcxFileConvert
  1135.                          scalingbuffer deallocation error
  1136.                          pcxFileDisplay error: ##
  1137.  
  1138.  
  1139.             
  1140.             --------------------------------------------------------------------
  1141.             ROTOR(tm)    Troubleshooting: Run-time error messages         9 - 09
  1142.             --------------------------------------------------------------------
  1143.  
  1144.             run-time
  1145.             errors     : In some exceptional situations, ROTOR(tm) may interrupt
  1146.                          you rudely with a cryptic message that looks
  1147.                          something like this:
  1148.  
  1149.                             Run-Time error nnn at XXXX:YYYY
  1150.  
  1151.                          where nnn is an error number
  1152.                          and   XXXX:YYYY is the run-time error-address.
  1153.  
  1154.                          example:
  1155.  
  1156.                             Run-Time error 203 at 23B1:45FF
  1157.  
  1158.                          When an error of this nature occurs, the user is
  1159.                          usually returned to the DOS prompt.  Occasionally, the
  1160.                          system freezes-up, and the only way to get it going
  1161.                          again is to turn it off, and then back on.
  1162.  
  1163.                          We have spent a great deal of effort guarding ROTOR(tm)
  1164.                          again such occurances.  They should not happen at all,
  1165.                          but we are only human, and therefore, we may have
  1166.                          overlooked some obscure circumstance where such a
  1167.                          run-time error is inevitable.
  1168.  
  1169.                          If you suffer an encounter with such an error, please
  1170.                          REPORT it immediately.  Write down on a piece of paper
  1171.                          the exact message, including the error number and its
  1172.                          address.  This information allows us to pin point the
  1173.                          cause and location of the error.  Without it, it is
  1174.                          nearly impossible to find and correct the problem.
  1175.  
  1176.            error
  1177.            codes       : The following table of run-time error-codes is included
  1178.                          for your education.
  1179.  
  1180.                          code :  nature of problem
  1181.                          -----+-------------------------------------------------
  1182.                          200  :  Division by zero.
  1183.                          201  :  Range check error.
  1184.                          202  :  Stack overflow error.
  1185.                          203  :  Heap overflow error.
  1186.                          204  :  Invalid pointer operation.
  1187.                          205  :  Floating point overflow.
  1188.                          206  :  Floating point underflow.
  1189.                          207  :  Invalid floating point operation.
  1190.  
  1191.                          Run-time errors are generated by the Turbo Pascal
  1192.                          run-time module.
  1193.  
  1194.             
  1195.             --------------------------------------------------------------------
  1196.             ROTOR(tm)    Troubleshooting: User-support                    9 - 10
  1197.             --------------------------------------------------------------------
  1198.  
  1199.  
  1200.             call       : (404)240-0410.  If no one is available, please leave
  1201.                          a message.  Or try again later.  Calls will be
  1202.                          returned collect.
  1203.  
  1204.  
  1205.             write      : ROTOR(tm) by Michel Robert
  1206.                          1732 Dunwoody Place
  1207.                          Atlanta, GA 303024-2734
  1208.  
  1209.             disk
  1210.             replacement
  1211.             policy     : Registered users may obtain a replacement disk when
  1212.                          their original disk becomes lost or damaged.  The
  1213.                          nominal fee for this service is $10.00.
  1214.  
  1215.                          Please specify the type of disk desired, and include
  1216.                          your serial number, if possible, along with your
  1217.                          name and mailing address.
  1218.  
  1219.             
  1220.             --------------------------------------------------------------------
  1221.             ROTOR(tm)    Programming : Introduction                      10 - 01
  1222.             --------------------------------------------------------------------
  1223.  
  1224.  
  1225.             purpose    : The ROTOR(tm) script language is designed to accomodate
  1226.                          the following program extensions:  customization of
  1227.                          start-up defaults, user-created commands, and animation
  1228.                          scripting.
  1229.  
  1230.  
  1231.             customized
  1232.             start-up   : By default, when ROTOR(tm) begins, a rotating pulsing
  1233.                          square appears in the middle of the screen.
  1234.  
  1235.                          This configuration may not be quite to your liking.
  1236.                          Perhaps you would prefer instead a yellow triangle in
  1237.                          the top left corner.  Or maybe several simple dots in a
  1238.                          row.  Or....  Well, the possibilities are innumerable.
  1239.                          The point being made is that alternate start-up
  1240.                          configurations are desirable.  The script language
  1241.                          makes them possible.
  1242.  
  1243.             user
  1244.             commands   :
  1245.                          Tedious repetitive sequences of standard commands can
  1246.                          be automated via short script programs called macros.
  1247.  
  1248.                          This is an extremely powerful feature.  At first
  1249.                          glance, its benefits may not be obvious.  So we provide
  1250.                          several examples to illustrate its versatility.
  1251.  
  1252.             animation
  1253.             scripting  :
  1254.                          The demo-logo which appears when ROTOR(tm) begins is a
  1255.                          scripted-animation.  All of the instructions necessary
  1256.                          to generate the logo-motion are external script-file
  1257.                          statements.  In other words, the logo-animation is not
  1258.                          hard-wired into the ROTOR(tm) executable file.  Users
  1259.                          are free to replace our demo with elaborate creations
  1260.                          of their own.
  1261.  
  1262.                          Animation scripting is the ultimate challenge for
  1263.                          dedicated ROTOR(tm) fans.  It is not particularly easy,
  1264.                          but it is rewarding, and therefore definitely worth the
  1265.                          effort.
  1266.  
  1267.             
  1268.             difficulty :
  1269.                          We realize that most of you have no programming
  1270.                          experience whatsoever.  Please do not be intimidated
  1271.                          by the word "programming".  If you can write a grocery
  1272.                          shopping list, then you can definitely write simple
  1273.                          programs.
  1274.  
  1275.                          Basically, a program  is nothing but a list of commands
  1276.                          to be executed in the order in which they appear.
  1277.  
  1278.                          The ROTOR(tm) script language is not particularly
  1279.                          complex in and of itself.  It uses simple commands
  1280.                          which mimic the interface controls.  Once you've become
  1281.                          familiar with the program, the language commands are
  1282.                          relatively easy to understand and use.
  1283.  
  1284.                          The tricky part is the animation process itself.
  1285.                          There are many details to consider.  Overlooked
  1286.                          parameters cause unpredictable object-behavior. And of
  1287.                          course, some imagination is necessary.
  1288.  
  1289.             learning by
  1290.             example    : The best way to learn the ROTOR(tm) script language is
  1291.                          by imitation and experimentation.
  1292.  
  1293.                          The ROTOR(tm) script file contains numerous examples,
  1294.                          some of which are very simple.  We strongly recommend
  1295.                          that you spend some time examining them.  Please do not
  1296.                          be afraid to modify these samples.  Try simple changes,
  1297.                          such as replacing ON with OFF, or 3 with 4. See what
  1298.                          happens!  Then try adding new statements! Be bold!
  1299.  
  1300.                          Here's an easy challenge:  Let see if you can manage to
  1301.                          replace the demo-logo with an airplane-shape.
  1302.  
  1303.                          But first, please read on.  The following pages
  1304.                          discuss the fundamental 'rules' of the language.
  1305.  
  1306.  
  1307.             
  1308.             --------------------------------------------------------------------
  1309.             ROTOR(tm)    Programming : The script file                   10 - 02
  1310.             --------------------------------------------------------------------
  1311.  
  1312.             ROTOR20.SCR
  1313.                        : ROTOR(tm) is programmed via a script file which must be
  1314.                          named ROTOR20.SCR.  This file is automatically read
  1315.                          into memory when the program starts-up.  The loading
  1316.                          process is not instantaneous, due to error-checking and
  1317.                          other script-processing procedures.
  1318.  
  1319.                          Please note that ROTOR20.SCR is not absolutely
  1320.                          mandatory.  It is perfectly acceptable to run ROTOR
  1321.                          with no script file at all.  In fact, when it is
  1322.                          missing, ROTOR(tm) actually loads substantially faster.
  1323.  
  1324.             it's a
  1325.             text file  : The script file is a normal text file, which can be
  1326.                          edited with any word-processor or editor.
  1327.  
  1328.                          It should contains only printable characters.  Embedded
  1329.                          formatting commands are generally not allowed.
  1330.  
  1331.                          It is not case-sensitive, which means that upper and
  1332.                          lower case letters are interchangeable.
  1333.  
  1334.                          We recommend lower-case text, as it to be somewhat more
  1335.                          legible than upper-case.
  1336.  
  1337.             file
  1338.             structure  : The script is basically a list of one-line instructions
  1339.                          called 'statements'.
  1340.  
  1341.                          Each script line is a complete statement.
  1342.                          Several statements may not be squeezed into a single
  1343.                          line, and  multi-line statements not allowable either.
  1344.  
  1345.                          Blank lines are OK.
  1346.  
  1347.  
  1348.             comments   : Any statement begining with a period (.) is a comment.
  1349.  
  1350.                          Comments are automatically filtered out when the script
  1351.                          is loaded into memory.  Therefore, they have no effect
  1352.                          whatsoever on ROTOR(tm).
  1353.  
  1354.                          Comments are intended for labels, descriptions, code
  1355.                          explanations.  They help make a script legible and
  1356.                          comprehensible.  Good commenting-habits make a great
  1357.                          programmer.
  1358.  
  1359.                          The commenting 'dot' can be used to temporarily
  1360.                          de-activate a statement without deleting it completely
  1361.                          from the script file.  This is a handy trick when
  1362.                          debugging.
  1363.  
  1364.             
  1365.             program
  1366.             blocks     : A program block is a set of consecutive statements
  1367.                          which begins with a block-labelling statement and ends
  1368.                          with a tail END statement.
  1369.  
  1370.                          Nested blocks are illegal.  In other words, a block
  1371.                          may not enclose another.
  1372.  
  1373.                          The ROTOR20.SCR script file may contain up to 40
  1374.                          program blocks.
  1375.  
  1376.                          There are two kinds of blocks, macros and procedures.
  1377.                          They are easily distinguishable: macros begin with a
  1378.                          MACRO statement, procedures with a PROCEDURE statement.
  1379.  
  1380.  
  1381.             macros     : Macros are user-defined interface commands.
  1382.  
  1383.                          When a macro is added to the script file, it is
  1384.                          automatically integrated into the user interface via
  1385.                          the macros-menu (Press shift-\).  To run a macro, the
  1386.                          user selects it from the menu.
  1387.  
  1388.                          When a macro is called, its statements are executed at
  1389.                          once in the order in which they apppear.
  1390.  
  1391.                          The macro named MAIN is automatically executed when the
  1392.                          script file is read, and may be re-executed later via
  1393.                          the macro-menu.
  1394.  
  1395.  
  1396.             procedures : Procedures are user-defined SCRIPT-LANGUAGE commands.
  1397.  
  1398.                          Procedures allow us to break-up complex programming
  1399.                          tasks into small simple chunks.   They also help
  1400.                          eliminate code duplication.
  1401.  
  1402.                          Procedures are called by macros or other procedures via
  1403.                          the DO command.   When a procedure is called, its
  1404.                          statements are executed at once, in the order in which
  1405.                          they appear.
  1406.  
  1407.                          Procedures must be DEFINED before they may be called.
  1408.  
  1409.                          Procedures are not user-callable.  They are not visible
  1410.                          to the ROTOR-user.
  1411.  
  1412.             initialization
  1413.             statements :
  1414.                          All non-macro and non-procedure statements are
  1415.                          initialization statements.  They are automatically
  1416.                          executed when the script file is read.
  1417.  
  1418.                          Although they are usually placed at the begining of the
  1419.                          script file, they may also be placed between macro or
  1420.                          procedure definitions.
  1421.  
  1422.  
  1423.             
  1424.             --------------------------------------------------------------------
  1425.             ROTOR(tm)    Programming : Statement syntax                  10 - 03
  1426.             --------------------------------------------------------------------
  1427.  
  1428.             statement
  1429.             syntax     : A statement consists of a command KEYWORD, which may
  1430.                          be followed by one or more ARGUMENTS.  Some commands
  1431.                          take no arguments.
  1432.  
  1433.                          One or more space characters must separate the various
  1434.                          arguments from each other and the keyword. Leading and
  1435.                          extra spaces are ok.
  1436.  
  1437.                          Terminating punctuation characters such as semicolons
  1438.                          and periods are neither necessary nor acceptable.
  1439.  
  1440.  
  1441.             arguments  : There are three basic argument types:
  1442.                          + identifiers
  1443.                          + Value-terms
  1444.                          + Boolean terms  (or commands)
  1445.                          We study these in detail in the following sections.
  1446.  
  1447.  
  1448.             statement
  1449.             examples   : switch   SHAPE  OFF  random
  1450.                          switch   VEER   OFF          nc    270
  1451.                          dec      shape_tilt   90
  1452.                          update
  1453.                          stamp  |                               |
  1454.                            |    +--------- arguments -----------+
  1455.                            |
  1456.                            +-------------  keywords
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.             
  1464.             --------------------------------------------------------------------
  1465.             ROTOR(tm)    Programming : Command keywords                  10 - 04
  1466.             --------------------------------------------------------------------
  1467.  
  1468.                          This sections lists the script language command
  1469.                          keywords, first in functional categories, and then
  1470.                          alphabetically.  The actual usage rules for each
  1471.                          command are NOT shown here.  They are presented in
  1472.                          the reference guide at the end on this chapter.
  1473.  
  1474.                          The commands keywords are:
  1475.  
  1476.             block
  1477.             definition : END       :  Marks the end of a macro or procedure.
  1478.                          MACRO     :  To begin a macro definition.
  1479.                          PROCEDURE :  To begin a procedure definition.
  1480.  
  1481.             block
  1482.             execution  : DO        :  Execute a user-defined procedure.
  1483.                          DONE      :  Abort the current macro.
  1484.                          EXIT      :  To skip remaining macro/procedure code.
  1485.                          IF        :  For conditional execution of a procedure.
  1486.                          WHEN      :  For conditional execution of a procedure.
  1487.  
  1488.             current
  1489.             object
  1490.             control    : Attribute editing:
  1491.                          DEFAULTS  :  Re-initialize object to default state.
  1492.                          PULSE     :  To pulse an attribute.
  1493.                          SIZE      :  To resize the zone, cursor or shape.
  1494.                          STAMP     :  Draws shape using current attributes.
  1495.                          SWITCH    :  To set an object-switch and related items.
  1496.                          TURN      :  To change the angle (direction) of travel.
  1497.                          UPDATE    :  Updates the current object.
  1498.  
  1499.                          Motion / position control:
  1500.                          MOVE      :  Moves cursor or zone in given direction.
  1501.                          MOVE2XY   :  Moves cursor or zone to given coordinates.
  1502.                          POSITION  :  Pre-defined positions for cursor or zone.
  1503.  
  1504.                          Parameter editing:
  1505.                          DEC       :  To decrement a specified parameter.
  1506.                          INC       :  To increment a specified parameter.
  1507.                          JITTER    :  To randomly adjust a specified parameter.
  1508.                          MAXIMIZE  :  To set a parameter to its maximum value.
  1509.                          MINIMIZE  :  To set a parameter to its minimum value.
  1510.                          PARAM     :  To set a parameter & its pulse attributes.
  1511.                          SET       :  To set a parameter's value.
  1512.  
  1513.             multiple
  1514.             object
  1515.             management : CYCLE     :  Execute 1 or more animation cycles.
  1516.                          DUPLICATE :  Create a copy of the current object.
  1517.                          KILL      :  To get rid of the current objet.
  1518.                          NEW       :  To create a new random shape.
  1519.                          NEXT      :  Shifts cursor over to next defined object.
  1520.                          PREVIOUS  :  Shifts cursor to preceeding object.
  1521.  
  1522.             interface
  1523.             commands   : DELETE    :  Erase all or part of the work area.
  1524.                          MENU      :  To request a menu change.
  1525.                          OPTION    :  To set a system option.
  1526.  
  1527.             debugging
  1528.             commands   : BEEP      :  Sound a short warning 'beep'.
  1529.                          DEBUG     :  Display script statements.
  1530.                          MESSAGE   :  To display a message.
  1531.                          PAUSE     :  Waits for a user-keypress.
  1532.                          REPORT    :  To request output of internal data.
  1533.                          SHOW      :  To display the value of a parameter.
  1534.  
  1535.             
  1536.             --------------------------------------------------------------------
  1537.             ROTOR(tm)    Programming : Command keywords                  10 - 04
  1538.             --------------------------------------------------------------------
  1539.  
  1540.             keyword
  1541.             list       : The following is a complete alphabetical list of the
  1542.                          script language keywords:
  1543.  
  1544.                          keyword   :  command description
  1545.  
  1546.                          BEEP      :  Sound a short warning 'beep'.
  1547.                          CYCLE     :  Execute 1 or more animation cycles.
  1548.                          DEBUG     :  Display script statements.
  1549.                          DEC       :  To decrement a specified parameter.
  1550.                          DEFAULTS  :  Re-initialize object to default state.
  1551.                          DELETE    :  Erase all or part of the work area.
  1552.                          DO        :  Execute a user-defined procedure.
  1553.                          DONE      :  Abort the current macro.
  1554.                          DUPLICATE :  Create a copy of the current object.
  1555.                          END       :  Marks the end of a macro or procedure.
  1556.                          EXIT      :  To skip remaining macro/procedure code.
  1557.                          IF        :  For conditional execution of a procedure.
  1558.                          INC       :  To increment a specified parameter.
  1559.                          JITTER    :  To randomly adjust a specified parameter.
  1560.                          KILL      :  To get rid of the current objet.
  1561.                          MACRO     :  To begin a macro definition.
  1562.                          MAXIMIZE  :  To set a parameter to its maximum value.
  1563.                          MESSAGE   :  To display a message.
  1564.                          MINIMIZE  :  To set a parameter to its minimum value.
  1565.                          MOVE      :  Moves cursor or zone in given direction.
  1566.                          MOVE2XY   :  Moves cursor or zone to given coordinates.
  1567.                          NEW       :  To create a new random shape.
  1568.                          NEXT      :  Shifts cursor over to next defined object.
  1569.                          OPTION    :  To set a system option.
  1570.                          PARAM     :  To set a parameter & its pulse attributes.
  1571.                          PAUSE     :  Waits for a user-keypress.
  1572.                          POSITION  :  Pre-defined positions for cursor or zone.
  1573.                          PREVIOUS  :  Shifts cursor to preceeding object.
  1574.                          PROCEDURE :  To begin a procedure definition.
  1575.                          PULSE     :  To pulse an attribute.
  1576.                          REPORT    :  To request output of internal data.
  1577.                          SET       :  To set a parameter's value.
  1578.                          SIZE      :  To resize the zone, cursor or shape.
  1579.                          SHOW      :  To display the value of a parameter.
  1580.                          STAMP     :  Draws shape using current attributes.
  1581.                          SWITCH    :  To set an object-switch and related items.
  1582.                          MENU      :  To request a menu change.
  1583.                          TURN      :  To change the angle (direction) of travel.
  1584.                          UPDATE    :  Updates the current object.
  1585.                          WHEN      :  For conditional execution of a procedure.
  1586.  
  1587.                          The precise syntax of each command is presented in
  1588.                          detail in the script-language reference guide.
  1589.  
  1590.  
  1591.             
  1592.             --------------------------------------------------------------------
  1593.             ROTOR(tm)    Programming : Identifiers                       10 - 05
  1594.             --------------------------------------------------------------------
  1595.  
  1596.  
  1597.             identifiers: An identifier is a word.  It names a program entity.
  1598.                          It enables us to refer to it.
  1599.  
  1600.             link to
  1601.             interface  : As much as possible, identifiers are drawn from
  1602.                          ROTOR(tm)'s pop-up menus.  In other words, the script
  1603.                          language recognizes (and expects) identifying words
  1604.                          that match those appearing in ROTOR(tm)'s interface.
  1605.  
  1606.                          The following items are referred to in this manner:
  1607.  
  1608.                          item type:          pop-up menu:        menu-access:
  1609.  
  1610.                          switch ............ Set Switches        [)]
  1611.                          switch-mode ....... modes-menu          Alt-letter
  1612.                          parameter ......... Parameter List      [~]
  1613.                          pulse-mode ........ Pulse how?          Alt-Ctrl-letter
  1614.                          menu-bar .......... What menu?          click-titlebox
  1615.                          sizing-commands ... Cursor/Zone resize  [=]
  1616.                          delete-options .... Delete what?        [Del]
  1617.                          program-options ... System Options      [(]
  1618.  
  1619.  
  1620.             examples   : The following are valid statements. The words in upper
  1621.                          case are identifiers drawn from the interface:
  1622.  
  1623.                          switch SHAPE on  PLANES
  1624.                                   |          +--- shape-type identifier is drawn
  1625.                                   |               from SHAPE-modes pop-up menu.
  1626.                                   +-------------- switch-identifier.
  1627.  
  1628.                          pulse  ROLL on UPWARD 7
  1629.                                   |        |
  1630.                                   |        +----- pulse-mode identifier
  1631.                                   +-------------- switch-identifier.
  1632.  
  1633.  
  1634.                          inc    SHAPE_TILT <----- parameter-identifier.
  1635.  
  1636.                          menu   ICON <----------- menu-identifier.
  1637.  
  1638.                          size   zone  WORKAREA <- delete-option
  1639.  
  1640.             
  1641.             additional
  1642.             identifiers:
  1643.                          The interface does not express in words certain basic
  1644.                          concepts, such as toggle states and motion directions.
  1645.                          The script language supplies equivalent terms:
  1646.  
  1647.                          concepts:           corresponding identifiers:
  1648.  
  1649.                          toggle states ..... ON, OFF
  1650.                          toggle commands ... TOGGLE, NC
  1651.                          boolean operators.. AND, OR
  1652.                          shape-sizes ....... DOTSIZE, FULLSIZE
  1653.                          items ............. SWITCH, PARAMETER, VARIABLE
  1654.                          directions ........ D&L, DOWN, D&R, LEFT, RIGHT,
  1655.                                              U&L, UP, U&R
  1656.                          positions ......... BL, BOTTOM, BR, LEFT, CENTER,
  1657.                                              RIGHT, TL, TOP, TR
  1658.                          built-in tests .... LEVEL, KEYPRESS
  1659.                          variables ......... PHASE, COUNT, ACTIVE
  1660.                          reports ........... FILE, MACROLIST, PROCLIST, CMDLIST,
  1661.                                              DO_CALLS
  1662.  
  1663.  
  1664.             user-defined
  1665.             identifiers:
  1666.                          When a procedure is created, it is given an identifying
  1667.                          name.  This name becomes 'part' of the script language.
  1668.  
  1669.                          When a macro is defined, it is also given an
  1670.                          identifying name.  This names become an entry of the
  1671.                          pop-up macros-menu.
  1672.  
  1673.                          Neither procedure nor macro identifiers may not contain
  1674.                          more than 15 characters.
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.             
  1681.             --------------------------------------------------------------------
  1682.             ROTOR(tm)    Programming : Value terms                       10 - 06
  1683.             --------------------------------------------------------------------
  1684.  
  1685.             value-term
  1686.             arguments  :
  1687.                          These arguments represent a numeric value in the range
  1688.                          -32768..32767.
  1689.  
  1690.                          There are two kinds of value_terms: literals, and
  1691.                          referenced parameters.
  1692.  
  1693.             numeric
  1694.             literals   : Literals are specific numbers which are hard wired into
  1695.                          the script.  The following are literals:
  1696.  
  1697.                          12
  1698.                          -360
  1699.  
  1700.                          Spaces, commas, decimal points and plus-signs are not
  1701.                          allowed in literal numbers.  In other words, the
  1702.                          following are illegal numeric representations:
  1703.  
  1704.                          - 312          <- illegal space
  1705.                          +4             <- illegal plus-sign
  1706.                          3.34           <- illegal decimal point
  1707.                          3,444          <- illegal comma
  1708.                          - 2,000.00     <- space, comma and decimal point are
  1709.                                           all illegal.
  1710.  
  1711.             referenced
  1712.             parameters : Instead of spelling out a number precisely, it is
  1713.                          sometimes preferable to refer to the value held by
  1714.                          a parameter.  This is accomplished by bracketing
  1715.                          the parameter's name with '%' characters.
  1716.  
  1717.                          Every parameter is linked to a 'pstep' value which
  1718.                          dictates its variability when pulsed.  This pstep
  1719.                          value can be refered to by inserting a tilde (~)
  1720.                          between the leading % and the parameter's name.
  1721.  
  1722.                          The following are all valid referenced-parameter
  1723.                          examples:
  1724.  
  1725.                          %fill_color%   <- the value of the fill_color parameter
  1726.                          %phase%        <- the value of the phase variable
  1727.                          %~global_tilt% <- the pstep value of the global_tilt
  1728.                                            parameter.
  1729.  
  1730.  
  1731.             
  1732.             --------------------------------------------------------------------
  1733.             ROTOR(tm)    Programming : Boolean terms and commands        10 - 07
  1734.             --------------------------------------------------------------------
  1735.  
  1736.             boolean
  1737.             terms      : They represent a toggle-state (ON or OFF)
  1738.                          or a test-result ( TRUE or FALSE ).
  1739.  
  1740.                          There are three kinds of boolean-terms : literals,
  1741.                          referenced toggles, and built-in tests.
  1742.  
  1743.             boolean
  1744.             literals   : These are specific boolean values.
  1745.                          There are only two legal boolean literals:
  1746.  
  1747.                          ON   ( = true  )
  1748.                          OFF  ( = false )
  1749.  
  1750.             referenced
  1751.             toggles    : Instead of dictating a specific ON/OFF value, it
  1752.                          is often more useful to refer to the state of an
  1753.                          object-toggle.  This is done by inserting the toggle's
  1754.                          name between square brackets ([,]).
  1755.  
  1756.                          The pulse-toggle of the linked parameter may be
  1757.                          referred to by inserting a tilde (~) prefix between
  1758.                          the leading [ and the toggle's name.
  1759.  
  1760.                          The following are all valid referenced-toggle examples:
  1761.                          [FILL]        <- state of the FILL toggle.
  1762.                          [~FILL]       <- state of the fillcolor pulse-toggle.
  1763.  
  1764.             built-in
  1765.             tests      : These allow us to check for specific conditions.
  1766.                          The following is a complete list of the built-in
  1767.                          tests:
  1768.  
  1769.                          cursor-position tests:
  1770.                          BL       : is it in the bottom-left corner of ZONE?
  1771.                          BOTTOM   : is it on the bottom edge of ZONE?
  1772.                          BR       : is it in the bottom-right corner of ZONE?
  1773.                          LEFT     : is it on the left edge of ZONE?
  1774.                          CENTER   : is it centered in ZONE?
  1775.                          RIGHT    : is it on the right edge of ZONE?
  1776.                          TL       : is it in the top-left corner of ZONE?
  1777.                          TOP      : is it on the top edge of ZONE?
  1778.                          TR       : is it in the top-right corner of ZONE?
  1779.  
  1780.                          shape tests:
  1781.                          LEVEL    : is it level?  (GlobalTilt=0).
  1782.                          FULLSIZE : does its radius match the cursor's?
  1783.                          DOTSIZE  : does it have a zero radius?
  1784.  
  1785.                          other:
  1786.                          KEYPRESS : did the user strike a key?
  1787.  
  1788.             
  1789.  
  1790.             negative   : The opposite of a boolean term is indicated by a
  1791.                          concatenated NOT' prefix.
  1792.  
  1793.                          example:   not'ON
  1794.  
  1795.             more
  1796.             boolean
  1797.             examples   : All of the following are valid boolean-terms:
  1798.  
  1799.                          OFF           <- a boolean literal
  1800.                          [LINE]        <- a referenced toggle
  1801.                          [~VEER]       <- a referenced pulse-toggle
  1802.                          Level         <- a built-in test
  1803.                          NOT'on        <- negated boolean literal
  1804.                          NOT'CENTER    <- negated test
  1805.                          Not'[tilt]    <- negated referenced toggle
  1806.  
  1807.  
  1808.             boolean
  1809.             commands   : Boolean commands act upon toggles, instead of just
  1810.                          describing their state.
  1811.  
  1812.                          There are two boolean-commands:  NC and TOGGLE
  1813.  
  1814.                          When the TOGGLE command is applied, it forces the
  1815.                          target-switch into an opposite-state.
  1816.  
  1817.                          NC is the 'no change' command.  When it is applied,
  1818.                          it leaves the target-toggle unchanged.  It is intended
  1819.                          as a 'place-holder', for use in statements which
  1820.                          contain many arguments.
  1821.  
  1822.                          In addition, any of the boolean-terms discussed
  1823.                          previously may be used where a boolean-command is
  1824.                          required.  The target toggle is forced to the state
  1825.                          described by the boolean-term.
  1826.  
  1827.             boolean
  1828.             command
  1829.             examples   : Boolean commands appear as arguments in various
  1830.                          statements.  The following commands illustrate:
  1831.                          (The boolean commands are shown in upper case)
  1832.  
  1833.                          option  quiet  TOGGLE     <- toggle the quiet option.
  1834.  
  1835.                          switch  fill   [LINE]     <- set FILL-toggle to
  1836.                                                       match the LINE-toggle.
  1837.  
  1838.                          pulse   line  LEVEL       <- pulse the line-color
  1839.                                                       if the shape is level.
  1840.  
  1841.                          param   motor_step 9  ON  <- begin pulsing the
  1842.                                                       motor_step parameter.
  1843.  
  1844.                          switch  go  NC  edge  4   <- set the motor-step
  1845.                                                       parameter to 4 without
  1846.                                                       toggling the GO switch.
  1847.             
  1848.             --------------------------------------------------------------------
  1849.             ROTOR(tm)    Programming :  conditional expressions          10 - 08
  1850.             --------------------------------------------------------------------
  1851.  
  1852.                          Conditional expressions are essentially user-defined
  1853.                          tests, consisting of one or more boolean components.
  1854.                          They are the backbone of conditional sub-program
  1855.                          execution.  They allow us to restrict the use of a
  1856.                          procedure to specific circumstances.
  1857.  
  1858.                          They appear after they keywords IF, WHEN and UNTIL.
  1859.  
  1860.             syntax     : A conditional expression is basically a list of
  1861.                          'conditions'.   Each condition may be either a boolean
  1862.                          term like [FILL] or a more lengthy comparison.
  1863.                          We discuss comparisons in the next section.
  1864.  
  1865.             boolean
  1866.             operators  : When a conditional expression includes several terms,
  1867.                          they are linked by boolean operators ( AND or OR ).
  1868.  
  1869.                          AND'ed conditions must be satisfied simultaneously
  1870.                          to make the whole expression true.
  1871.  
  1872.                          example : [LINE] and [FILL]  <- true if both toggles
  1873.                                                          are ON.
  1874.  
  1875.                          OR'ed  conditions are valid alternatives, any one of
  1876.                          which if sufficient to validate the entire expression.
  1877.  
  1878.                          example : [LINE]  or [FILL]  <- true if either toggle
  1879.                                                          is ON.
  1880.  
  1881.             mixed
  1882.             operators  : When AND and OR operator are intermixed, the
  1883.                          expression is evaluated from left to right.
  1884.                          An expression such as:   cond1 op cond2 op cond3
  1885.                          is equivalent to:      (cond1 op cond2) op cond3
  1886.  
  1887.                          examples :
  1888.  
  1889.                          [LINE] and [FILL] or [BACK]
  1890.                          The expression above is true when both LINE and FILL
  1891.                          are ON.  It is also true when BACK is ON.
  1892.  
  1893.                          [LINE] or  [FILL] and [BACK]
  1894.                          The expression above is true when either LINE or FILL
  1895.                          (or both) are ON, and BACK is also ON.
  1896.  
  1897.             expression
  1898.             examples   : All of the following are valid statements:
  1899.  
  1900.                          if    [Go] and [veer] and [pave]       do done
  1901.                          if    NOT'[~Go] and level or [pave]    do exit
  1902.                          when  [Line] and [~Fill] or [~Xhatch]  do done
  1903.                               |                               |
  1904.                               +------- cond. expressions -----+
  1905.             
  1906.             --------------------------------------------------------------------
  1907.             ROTOR(tm)    Programming :  Comparisons                      10 - 09
  1908.             --------------------------------------------------------------------
  1909.  
  1910.  
  1911.                          A comparison is a particular kind of user-defined test,
  1912.                          where a relationship between two values is examined.
  1913.  
  1914.                          When the numbers satisfy the expressed relationship,
  1915.                          the comparison is to TRUE.   When the relationship does
  1916.                          is not confirmed, the comparison evaluates to FALSE.
  1917.  
  1918.             comparison
  1919.             syntax     : Comparisons consists of two value-terms separated by a
  1920.                          comparison operator.
  1921.  
  1922.                          All three items must be concatenated together.  Blank
  1923.                          space is notv allowed between the operator and the
  1924.                          surrounding value-terms.
  1925.  
  1926.  
  1927.             operators  : The following operators are supported:
  1928.  
  1929.                              <>    not equal
  1930.                              =     equal
  1931.                              <     smaller than
  1932.                              >     larger than
  1933.                              <=    smaller or equal
  1934.                              >=    larger equal
  1935.  
  1936.             comparison
  1937.             examples   : All of the following are valid comparisons:
  1938.  
  1939.                          %tension%=4
  1940.                          12<=%~offsetY%
  1941.                          3>4
  1942.                          %line_color%<>%fill_color%
  1943.  
  1944.                          The following examples are illegal:
  1945.                          %line_color% = 12     <- illegal spaces
  1946.                          NOT'%line_color%=12   <- a comparison may not be
  1947.                                                   negated
  1948.  
  1949.  
  1950.             usage      : Comparisons are only legal within a conditional
  1951.                          expression. (see preceeding section)
  1952.  
  1953.                          The following are legal statements:
  1954.                          if  %line_color%=1 do done
  1955.                          if [~Line] and %line_color%<>%fill_color% do exit
  1956.                          Do BEEP until  [Fill] or [~Line] and 3>-2
  1957.  
  1958.                          Comparisons are not boolean-term substitutes.
  1959.                          The following statement is illegal:
  1960.                          switch FILL %line_color%=1
  1961.  
  1962.  
  1963.             
  1964.             --------------------------------------------------------------------
  1965.             ROTOR(tm)    Programming : Program initialization            10 - 10
  1966.             --------------------------------------------------------------------
  1967.  
  1968.  
  1969.             initialization
  1970.             statements :
  1971.                          Any statement that does not belong to a macro or
  1972.                          procedure is an intialization statement.
  1973.  
  1974.                          Intialization statements are usually located at the
  1975.                          beginning of the script file.  But they may also
  1976.                          be placed elsewhere, between program blocks.
  1977.  
  1978.                          Intialization statements are automatially executed when
  1979.                          the script file is loaded into memory.
  1980.  
  1981.  
  1982.             initalization
  1983.             goals      :
  1984.                          Initialization statements allow us to customize
  1985.                          ROTOR(tm).  Specifically, they may be used:
  1986.  
  1987.                          + to set system-options,
  1988.                          + to configure the menu-bar,
  1989.                          + to modify the attributes of the start-up object.
  1990.  
  1991.             setting
  1992.             system
  1993.             options    : The OPTION command allows us to change the default
  1994.                          options. Its syntax is as follows:
  1995.  
  1996.                             OPTION  option-name  option-status
  1997.                                                        |
  1998.                                            |           |
  1999.                                            |        ON or OFF
  2000.                                            |
  2001.                                            +------- name of option as it appears
  2002.                                                     in the sytem options pop-up
  2003.                                                     menu.
  2004.  
  2005.                          The following sample statements illustrate its
  2006.                          usage:
  2007.  
  2008.                             To select right-handed pop-up menus:
  2009.                             option    popright   ON
  2010.  
  2011.                             To disable the mouse and turn the sound off:
  2012.                             Option    MOUSE      OFF
  2013.                             option    Quiet      OFF
  2014.  
  2015.             
  2016.             to configure
  2017.             the menubar
  2018.                        : The MENU command allows us to request a particular
  2019.                          menu.   Its syntax is as follows:
  2020.  
  2021.                             MENU  menu-name
  2022.                                       |             name of menu as it appears
  2023.                                       +------------ in the menu-of-menus
  2024.  
  2025.                          The following sample statements illustrate its usage:
  2026.  
  2027.                             For a status bar with icons below:
  2028.                             MENU  status
  2029.                             MENU  icon
  2030.  
  2031.                             The first  MENU command select a top-menu, the
  2032.                             second, a bottom-menu.
  2033.             setting
  2034.             the object
  2035.             attributes : Various commands are available for this purpose:
  2036.                          SWITCH and PULSE are the most convenient ones.
  2037.  
  2038.             SWITCH     : The SWITCH command imitates the interface switches, and
  2039.                          provides a similar functionality.  Its syntax is as
  2040.                          follows:
  2041.  
  2042.                             SWITCH  name  state  mode  value
  2043.                                       |     |     |     |
  2044.                                       |     |     |    value to be assigned to
  2045.                                       |     |     |    linked parameter.
  2046.                                       |     |     |
  2047.                                       |     |     +--- switch-mode selected
  2048.                                       |     |
  2049.                                       |     +--------- apply this boolean
  2050.                                       |                command to the switch
  2051.                                       |
  2052.                                       +--------------- switch-name.
  2053.  
  2054.                             The mode and value arguments are optional.
  2055.                             When omitted, their current settings remain
  2056.                             unchanged.
  2057.  
  2058.                          The following statements illustrate its usage:
  2059.  
  2060.                             To select a plane-shape:
  2061.                             switch  SHAPE  ON  PLANES
  2062.  
  2063.                             This statement hides the cursor:
  2064.                             switch CURSOR off
  2065.  
  2066.                             To stop a moving object:
  2067.                             switch GO off
  2068.  
  2069.                             To request a red filled shape:
  2070.                             switch FILL on  nc   4
  2071.                                             |    +---- red
  2072.                                             +--------- do not change fill-mode
  2073.             
  2074.             PULSE      : The PULSE command imitates the interface pulse-toggles.
  2075.                          Its syntax is as follows:
  2076.  
  2077.                             PULSE switch pstate pmode pstep
  2078.                                       |     |     |     |
  2079.                                       |     |     |    value to be assigned to
  2080.                                       |     |     |    the pstep parameter.
  2081.                                       |     |     |
  2082.                                       |     |     +--- pulse-mode selected.
  2083.                                       |     |
  2084.                                       |     +--------- apply this boolean
  2085.                                       |                command to pulse-toggle
  2086.                                       |                of the parameter linked
  2087.                                       |                to the switch.
  2088.                                       |
  2089.                                       +--------------- switch-name.
  2090.  
  2091.                             The pmode and pstep arguments are also optional.
  2092.  
  2093.                          The following statements illustrate its usage:
  2094.                          For a rotating shape:      pulse ROLL on
  2095.                          For a shrinking object:    pulse SHRINK on upward 10
  2096.  
  2097.  
  2098.             UPDATE     : Both SWITCH and PULSE only affect internal toggles and
  2099.                          parmeters. The actual screen image of the edited object
  2100.                          remains unchanged until an UPDATE command is issued.
  2101.                          The following example illustrates:
  2102.  
  2103.                             switch shape off      <-- no screen change
  2104.                             switch cursor off     <-- no screen change
  2105.                             switch zone off       <-- no screen change
  2106.                             update                <-- the shape, cursor and zone
  2107.                                                       are now hidden away.
  2108.             to disable
  2109.             the demo   : When ROTOR(tm) begins, it plays a continously looping
  2110.                          demo featuring the ROTOR-logo.  The code for this demo
  2111.                          is located in a macro called MAIN, which automatically
  2112.                          kicks-in at start-up.
  2113.  
  2114.                          To disable the demo is a simple matter: just rename
  2115.                          the macro, to something like OLDMAIN or ROTORDEMO.
  2116.  
  2117.                          Why would you want to disable the demo?  Well, you may
  2118.                          have gotten tired it.  But more importantly, you'll
  2119.                          want to keep it from overwritting your initialization
  2120.                          commands.
  2121.  
  2122.             the exitmain
  2123.             procedure  : Alternatively, if you'd prefer not to deactivate demo,
  2124.                          you should insert all your commands in the exitmain
  2125.                          procedure.  Exitmain is called when user hits key to
  2126.                          end the demo.  It is located near the end of the
  2127.                          script file.
  2128.  
  2129.             
  2130.             --------------------------------------------------------------------
  2131.             ROTOR(tm)    Programming : Creating New Commands             10 - 11
  2132.             --------------------------------------------------------------------
  2133.  
  2134.  
  2135.                          ROTOR(tm) users can create custom commands tailored to
  2136.                          the specialized tasks.  This is a powerful feature,
  2137.                          with many possible applications, such as:
  2138.  
  2139.                          + The storage of program configurations.
  2140.                          + The formulation of involved drawing processes
  2141.                            such as border-drawing or spiral drawing.
  2142.                          + The specification of complex motion patterns.
  2143.                          + Automated construction of multiple object structures.
  2144.                          + Programmed toggle states. (alternating, timed, etc.)
  2145.  
  2146.                          To create such a command, the user writes a little
  2147.                          script program called a macro.
  2148.  
  2149.             macro
  2150.             structure  :
  2151.                          All macros consist of a list of statements to be
  2152.                          executed in the order in which they appear.
  2153.                          The first statement names the macro, the last one
  2154.                          is a terminal END.  The statements in between form
  2155.                          the 'body' of the macro:
  2156.  
  2157.                                 MACRO  <macro name>
  2158.                                 ..
  2159.                                 <macro body>
  2160.                                 ..
  2161.                                 END
  2162.  
  2163.             macro
  2164.             execution  : When the script file is read into memory, the defined
  2165.                          macros it contains automatically becomes ROTOR(tm)
  2166.                          commands.  The user may activate such a command at any
  2167.                          time, by selecting it from the pop-up Macro List.
  2168.                          (Press the |-key or shift-\, to pop up the Macro list)
  2169.  
  2170.                          Once a macro has been activated, its body is executed
  2171.                          at every ROTOR(tm) cycle, until the macro is
  2172.                          deactivated.
  2173.  
  2174.             macro
  2175.             deactivation
  2176.                        :
  2177.                          Some macros are self-deactivating, and some are not.
  2178.                          This is an important distinction, as it dramatically
  2179.                          alters the nature of a macro.
  2180.  
  2181.                          When a macro is self-deactivating, its body is executed
  2182.                          once, and then ROTOR(tm) resumes normal activities.
  2183.                          This type of macro is easy to write.  It is well suited
  2184.                          to simple tasks, such as generating default settings.
  2185.  
  2186.                          When a macro is NOT self-deactivating, it is executed
  2187.                          over and over, once per cycle, until deactivated by
  2188.                          some user-generated event.  This type of 'background'
  2189.                          macro can be fairly difficult to write.
  2190.  
  2191.                          We use the term 'foreground macro' to refer to a
  2192.                          self-deactivating macro.  Similarly, the term
  2193.                          'background macro' is just another name for a
  2194.                          'non-deactivating macro'.
  2195.  
  2196.                          Deactivation is effected by a DONE statement.  All
  2197.                          self-deactivating macros contain a DONE instance,
  2198.                          at the end of the body.
  2199.  
  2200.             foreground
  2201.             macro
  2202.             example    : The purpose of the foreground macro presented here is
  2203.                          to toggle the SHRINK and ROLL pulse-switches
  2204.                          simultaneously and in unison, so that they are either
  2205.                          both ON or both OFF.  When ON, the affected shape
  2206.                          shrinks and rotates in one swift motion.
  2207.  
  2208.                          This goal is achieved by simply toggling one
  2209.                          pulse-switch, and then forcing the second one to match.
  2210.  
  2211.                          The macro code is:
  2212.  
  2213.                          macro Vortex~          <- name the macro 'Vortex~'
  2214.                          pulse SHRINK toggle nc <- toggle SHRINK-pulsing
  2215.                          pulse ROLL [~SHRINK]   <- ROLL pulsing = SHRINK pulsing
  2216.                          update                 <- screen-update the object
  2217.                          done                   <- deactivate the macro
  2218.                          end                    <- end of the macro definition
  2219.  
  2220.  
  2221.             background
  2222.             macro
  2223.             example    : We examine here a simple background macro which toggles
  2224.                          TILT switch at every program cycle. This is not a
  2225.                          particularly useful macro, but it shows well the nature
  2226.                          of non-deactivating macros.
  2227.  
  2228.                          The macro code is:
  2229.  
  2230.                          macro tilt_Notilt      <- name the macro 'tilt_Notilt'
  2231.                          switch TILT toggle     <- toggle the TILT switch
  2232.                          end                    <- end of the macro definition
  2233.  
  2234.                          When this macro executed, the statement
  2235.  
  2236.                                            'switch TILT toggle'
  2237.  
  2238.                          is automatically executed time and time again, once per
  2239.                          program cycle, as if the user had his finger stuck on
  2240.                          the T-key which toggles TILT.  The affected shape
  2241.                          alternates between tilt and no-tilt poses.  This goes
  2242.                          on indefinitely, until a different macro is called,
  2243.                          thereby replacing this one.
  2244.  
  2245.                          In this example, the macro-body consists of a single
  2246.                          statement.  This is an unusually simple case. It is
  2247.                          more common to find multiple statements requesting the
  2248.                          conditional execution of several procedures.
  2249.  
  2250.             embedded
  2251.             cycles     : The preceeding discussion gives the impression that
  2252.                          foreground macros always execute within a single
  2253.                          cycle.  Although this is often the case, it is not a
  2254.                          valid generalization.   This is due to the availability
  2255.                          of a CYCLE command which is used  to 'embed' program
  2256.                          cycles within a macro.
  2257.  
  2258.                          This CYCLE command enables the insertion complex
  2259.                          animation sequences within a foreground macro,
  2260.                          giving it the appearance and feel of a background
  2261.                          macro.
  2262.  
  2263.                          The animation sequences generated by such embedded
  2264.                          CYCLEs are indentical to those produced by normal
  2265.                          program cycling.
  2266.  
  2267.             embedded
  2268.             cycles
  2269.             example    : The following macro is drawn from the ROTOR(tm) script
  2270.                          file.  It defines a 'crenelled' motion pattern,
  2271.                          as shown below:
  2272.  
  2273.                                          +---+   +---+   +---+
  2274.                                          |   |   |   |   |   |
  2275.                                     >>---+   +---+   +---+   +--->>>
  2276.  
  2277.                          Embedded cycles are used to advance the current
  2278.                          object along the path of a single 'crenel'.
  2279.  
  2280.                          macro crenelled-pave   <- name it 'crenelled-pave'
  2281.                          if [PAUSE] do exit     <- avoid frozen objects
  2282.                          switch GO ON           <- move
  2283.                          switch PAVE ON         <- in cursor-sized steps
  2284.                          update                 <- from now on.
  2285.                          move  cursor dec90     <- turn left 90 degrees
  2286.                          cycle 2                <- move along side1 of crenel
  2287.                          move  cursor inc90     <- turn right 90 degrees
  2288.                          cycle 2                <- move along top of crenel
  2289.                          move  cursor inc90     <- turn right 90 degrees
  2290.                          cycle 2                <- move along side2 of crenel
  2291.                          move  cursor dec90     <- turn left 90 degrees
  2292.                          cycle 1                <- move in original direction
  2293.                          end                    <- end of the macro definition
  2294.  
  2295.             input
  2296.             processing :
  2297.                          During macro execution, normal user-input processing is
  2298.                          temporarily halted.  This is not normally a problem,
  2299.                          as most macros execute in a fraction of a second.
  2300.  
  2301.                          Embedded CYCLEs do not respond to user-input at all.
  2302.                          When numerous program cycles are embedded in a macro,
  2303.                          the period during which user-input is ignored
  2304.                          increseases dramatically, causing noticeable delays.
  2305.                          This undersirable side effect is characteristic of
  2306.                          macros which rely heavily the CYCLE command.  So use it
  2307.                          sparingly!
  2308.             
  2309.             --------------------------------------------------------------------
  2310.             ROTOR(tm)    Programming : Animation scripting               10 - 12
  2311.             --------------------------------------------------------------------
  2312.  
  2313.  
  2314.                          This section discusses the construction of complex
  2315.                          animation scripts, such as the ROTOR(tm) demo.
  2316.  
  2317.                          Essentially, there are two ways to go:
  2318.  
  2319.                          The simplest approch consists of a foreground macro
  2320.                          with numerous embedded cycles, and attribute-setting
  2321.                          transitions in-between.
  2322.  
  2323.                          The more sophisticated route uses a background
  2324.                          macro to schedule transitions at the right moment.
  2325.  
  2326.                          In both cases it is a good idea to define transitions
  2327.                          in separate procedure blocks, which can be called at
  2328.                          the appropriate moment.  This organization produces
  2329.                          legible scripts, and helps avoid un-necessary code
  2330.                          duplications.
  2331.  
  2332.             the
  2333.             embedded
  2334.             cycles
  2335.             approach   : The general layout of such a script is:
  2336.  
  2337.                          MACRO <animation-name>
  2338.                          <intial setup>
  2339.                          CYCLE <times>
  2340.                          DO <transition 1>
  2341.                          CYCLE <times>
  2342.                          DO <transition 2>
  2343.                          ...
  2344.                          DO <transition n>
  2345.                          CYCLE <times>
  2346.                          <reset program defaults>
  2347.                          DONE
  2348.                          END
  2349.  
  2350.                          A transition can be anything: a change of color, a
  2351.                          shift in position, a switch to a different shape, the
  2352.                          creation of new objects, etc... Several of these
  2353.                          activities may be combined into a single transition.
  2354.  
  2355.                          The number of cycles between transitions depends
  2356.                          on the effect which is desired.
  2357.  
  2358.             
  2359.             background
  2360.             scheduling
  2361.             method     : This is the approach espoused by the ROTOR-logo demo,
  2362.                          whose MAIN macro is shown here:
  2363.  
  2364.                          macro   main
  2365.                          when    %phase%=0              do start
  2366.                          when    %phase%=1 and fullsize do waitforlevel
  2367.                          when    %phase%=2 and level    do beginloop
  2368.                          when    %phase%=3 and dotsize  do expand
  2369.                          when    %phase%=4 and fullsize do edgeaction
  2370.                          when    %phase%=5 and TL       do shrink
  2371.                          when    %phase%>5 and dotsize  do beginloop
  2372.                          if      keypress               do exitmain
  2373.                          end
  2374.  
  2375.                          The script consists of a series of user-defined
  2376.                          tests which are responsible for timely transitions.
  2377.  
  2378.                          It is important to note that these tests are executed
  2379.                          repeatedly, cycle after cycle.  Most of the time,
  2380.                          the tests all fail, and no transition takes place.
  2381.                          Periodically, an awaited set of circumstances is
  2382.                          encountered, triggering a call to a transition
  2383.                          procedure.
  2384.  
  2385.                          In order to maintain a strict sequence of events, the
  2386.                          macro tracks a special internal varible named 'phase'.
  2387.                          This variable records the animation's progress.  When
  2388.                          the macro begins, it is initialized to 0. Later, each
  2389.                          time a WHEN test leads to a transition call, it is
  2390.                          automatically incremented by 1.
  2391.  
  2392.                          The last test monitors the keyboard.  When the
  2393.                          user presses a key, the exitmain procedure is
  2394.                          executed.  It contains a DONE call, which deactivates
  2395.                          the entire macro.
  2396.  
  2397.             
  2398.             --------------------------------------------------------------------
  2399.             ROTOR(tm)    Programming : The macro processor.              10 - 13
  2400.             --------------------------------------------------------------------
  2401.  
  2402.  
  2403.                          Script programs are managed by two separate software
  2404.                          components:  the script-loader, and a macro-processor.
  2405.  
  2406.             the script
  2407.             loader     : The script loader reads the script file into memory.
  2408.                          It checks each statement for correctness, handles
  2409.                          syntax errors by issuing informative messages,
  2410.                          and translates the program into a binary format
  2411.                          suitable for fast exectution.  It also numbers the
  2412.                          macros for identification purposes.
  2413.  
  2414.                          This is not a trivial job.  The script loader is a
  2415.                          complex piece of software.
  2416.  
  2417.             the macro
  2418.             processor  : When the user selects a macro for execution, the
  2419.                          macro-processor is called upon to do so.
  2420.  
  2421.                          The operation of this macro-processor is closely linked
  2422.                          to an internal variable called ACTIVE, which identifies
  2423.                          the currently active macro.
  2424.  
  2425.                          By default,  ACTIVE is always initialized to 0, which
  2426.                          indicates an absence of active macro.  There is nothing
  2427.                          for the macro-processor to do, so it simply idles in
  2428.                          the background.
  2429.  
  2430.                          When a macro is selected, ACTIVE is assigned the
  2431.                          macro's identifying number.  The macro-processor now
  2432.                          has a job to do:  Once per cycle, it executes the
  2433.                          selected macro.  This continues endlessly, unless
  2434.                          ACTIVE is reset to 0.
  2435.  
  2436.             DONE       : The DONE commmand simply resets ACTIVE to 0.
  2437.  
  2438.             EXIT       : The EXIT command does NOT change ACTIVE.  It simply
  2439.                          names the END statement of the current block as the
  2440.                          next statement to be executed.  Statements in between
  2441.                          EXIT and END are skipped.  The macro is aborted, but
  2442.                          it is not deactivated.
  2443.  
  2444.  
  2445.             
  2446.             --------------------------------------------------------------------
  2447.             ROTOR(tm)    Programming : system variables                  10 - 14
  2448.             --------------------------------------------------------------------
  2449.  
  2450.  
  2451.             system
  2452.             variables  : The following internal variables may be manipulated by
  2453.                          the user, via the SET, INC and DEC script commands:
  2454.  
  2455.  
  2456.             PHASE      : This variable is used to monitor the progress of a
  2457.                          background macro.  By testing its value, one can
  2458.                          ensures that the various macro events occur in the
  2459.                          correct order.
  2460.  
  2461.                          WHEN statements increment PHASE by 1 as they execute DO
  2462.                          calls.
  2463.  
  2464.  
  2465.  
  2466.             COUNT      : This is a general purpose counter variable.  It is
  2467.                          invaluable for value-swapping programs.
  2468.  
  2469.  
  2470.             ACTIVE     : This variable is used to activate/deactivate the
  2471.                          macro processor.
  2472.  
  2473.                          Each macro is assigned an id-number when loaded into
  2474.                          memory.
  2475.  
  2476.                          When ACTIVE=0, the macro processor is iddle.
  2477.  
  2478.                          When ACTIVE=n, where n is a macro number,  the macro
  2479.                          processor repeatedly executes the macro n, until ACTIVE
  2480.                          is reset to 0.
  2481.  
  2482.  
  2483.             
  2484.             --------------------------------------------------------------------
  2485.             ROTOR(tm)    Programming : learning the language             10 - 15
  2486.             --------------------------------------------------------------------
  2487.  
  2488.  
  2489.             begin with
  2490.             some ROTOR
  2491.             experience : The script language is closely linked to ROTOR(tm)'s
  2492.                          interface.  The language commands imitate the interface
  2493.                          commands.  The terms employed in the interafce are
  2494.                          accepted by the matching script commands. This close
  2495.                          correspondance is a real benefit to users who are
  2496.                          familiar with the program.  It makes the language
  2497.                          intuitive and understandable.
  2498.  
  2499.                          We therefore strongly recommend that you spend some
  2500.                          time getting acquainted with the program before you
  2501.                          attempt any programming.
  2502.  
  2503.             read this
  2504.             chapter    : The material presented in this chapter is pretty much
  2505.                          esssential to understanding and mastering the language.
  2506.                          It covers both the basics and the nitty-gritty details
  2507.                          of scripts.
  2508.  
  2509.             examine the
  2510.             script file
  2511.             examples   : Test the knowledge acquired from the reading by
  2512.                          examining the ROTOR(tm) script file.  Does its
  2513.                          organization make sense to you?  Notice the comments!
  2514.                          There are numerous macro examples.  Examine them
  2515.                          carefully.  Do you understand how they work? Pay
  2516.                          attention to individual statements.  Do you know what
  2517.                          each statement does?  Do they remind you of particular
  2518.                          interface controls?
  2519.  
  2520.                          When an unfamiliar command in encountered, please look
  2521.                          it up in the reference guide at the end of this
  2522.                          chapter.
  2523.  
  2524.                          The idea here is to become comfortable with script
  2525.                          reading.  You should be able to understand what a
  2526.                          procedure does by simply looking at it.
  2527.  
  2528.                          Verify your thoughts by executing the script macros.
  2529.                          Observe carefully their effect and behavior.
  2530.  
  2531.             modifying
  2532.             the script
  2533.             macros     : Simple modifications of existing programs will later
  2534.                          help you muster the courage to create entire programs
  2535.                          from scratch.
  2536.  
  2537.                          First try disabling a statement.  This is an easy thing
  2538.                          to do.  Simply place a period (.) in front of it.  The
  2539.                          statement becomes a comment, no-longer contributing
  2540.                          to the functionality of the enclosing program.
  2541.                          Now execute the program.  Does it run differently?
  2542.                          Do you understand the change?
  2543.  
  2544.                          Next try changing a statement argument.  Replace an ON
  2545.                          with an OFF.   Change a numerical value.  Use an
  2546.                          alternate mode-identifiers.  Such modifications can
  2547.                          be used to change colors, shapes, patterns, etc...
  2548.  
  2549.                          Finally, add simple commands to an existing macro.
  2550.                          Try inserting a SWITCH command.  Try a MENU command.
  2551.                          Animate a parameter with a PULSE statement.  Etc..
  2552.  
  2553.             creating
  2554.             new macros
  2555.                        : This requires some imagination.  A purpose is needed.
  2556.                          We suggest that you begin with a modest goal.
  2557.                          A macro that toggles a couple of switches would be a
  2558.                          good starting point.
  2559.  
  2560.                          Do not worry about making errors.  ROTOR(tm) finds them
  2561.                          and helps you fix them with informative messages. (see
  2562.                          next section)
  2563.  
  2564.                          As your mastery of the language grows, your scripting
  2565.                          projects will naturally become more complex.  Simple
  2566.                          self-enclosed macros will give way to macros with
  2567.                          external procedure calls.   Foreground procedures
  2568.                          become the building blocks of larger background macros.
  2569.                          And so on.
  2570.  
  2571.  
  2572.             be Zen     : Learning a language is not something that happens
  2573.                          overnight.  Patience and preseverence are required.
  2574.                          All the old adages apply:
  2575.  
  2576.                               'Practice makes perfect'
  2577.                          and
  2578.                               'What you put in is what you get out'
  2579.  
  2580.             
  2581.             --------------------------------------------------------------------
  2582.             ROTOR(tm)    Troubleshooting: Script Error messages          10 - 16
  2583.             --------------------------------------------------------------------
  2584.  
  2585.  
  2586.             script
  2587.             errors     :
  2588.                          The script is loaded into memory one statement at a
  2589.                          time.  Each statement is verified for correctness as it
  2590.                          is being read.  When an error is encountered, it is
  2591.                          reported, and the erroneous statement is deleted from
  2592.                          memory.  Program execution is NOT aborted.
  2593.  
  2594.  
  2595.                          All script error messages are of the form:
  2596.  
  2597.                          error on line ###: <message>
  2598.  
  2599.                          These error messages appear at the top of the screen.
  2600.                          The line number (###) identifies the syntactically
  2601.                          invalid statement by showing its location in the
  2602.                          script file.
  2603.  
  2604.                          The following errors are automatically detected by the
  2605.                          script-loader:
  2606.  
  2607.                          Missing arguments,            Not enough memory
  2608.                          Missing ], %,                 integer expected
  2609.                          Missing END                   out-of-range
  2610.                          Missing AND/OR                <file-IO-error>
  2611.                          Bad comparison                token not recognized
  2612.                          Too many procedures           Duplicate identifier
  2613.  
  2614.                          To illustrate, we present a series of dummy examples,
  2615.                          with corresponding fixes:
  2616.  
  2617.  
  2618.                          error on line 104: [SHAPE  : Missing ]
  2619.                                        fix: [SHAPE]
  2620.  
  2621.  
  2622.                          error on line 124: %motor_step : Missing %
  2623.                                        fix: %motor_step%
  2624.  
  2625.  
  2626.                          error on line 143: [ROLL] [TILT] : Missing AND/OR
  2627.                                        fix: [ROLL] AND [TILT]
  2628.                                         or: [ROLL] OR  [TILT]
  2629.  
  2630.                          error on line 125: Missing END
  2631.                                        fix: This error is caused by an
  2632.                                             unterminated procedure or macro
  2633.                                             definition.  To fix it, just place an
  2634.                                             END statement at the correct place.
  2635.  
  2636.                          error on line 111: Too many procedures
  2637.                                        fix: Reduce the size of your script file.
  2638.                                             Get rid of unused macros.
  2639.  
  2640.  
  2641.                          error on line 132: Duplicate identifier PROC3
  2642.                                        fix: The word PROC3 is already in use,
  2643.                                             probably naming some other procedure.
  2644.                                             Change it to PROC4 or something else.
  2645.  
  2646.                          error on line 199: switch ROLE not recognized
  2647.                                        fix: This appears to be a spelling error.
  2648.                                             Just change ROLE to ROLL.
  2649.  
  2650.  
  2651.             token not
  2652.             recognized : This is perhaps the most commonly encountered script
  2653.                          error.  It appears anytime a word is incorrectly
  2654.                          spelled or inappropriately used.
  2655.  
  2656.                          These error messages do not simply denounce bad
  2657.                          statements.   They actually identify a specific
  2658.                          troublesome word.  The 'mold' which this word is
  2659.                          expected to fit is named, thereby providing an
  2660.                          important clue to help the user repair the statement.
  2661.  
  2662.                          Let us illustrate with examples:
  2663.  
  2664.                          error on line 199: switch ROLE not recognized
  2665.  
  2666.                                In this example, a SWITCH is apparently expected.
  2667.                                In that light, it is easy to see that ROLE is
  2668.                                simply a mis-spellling of ROLL.
  2669.  
  2670.  
  2671.                          error on line 133: parameter TILT not recognized
  2672.  
  2673.                                Here a parameter-name is required, but instead,
  2674.                                a switch-name was supplied.  The correct term
  2675.                                is probably 'shape_tilt'.
  2676.  
  2677.  
  2678.                          error on line 152: pulse-mode DOWN not recognized
  2679.  
  2680.                                Here a pulse-mode specifier is incorrectly
  2681.                                named.  The term wanted is DOWNWARD.
  2682.  
  2683.  
  2684.                          error on line 127: direction  TOP  not recognized
  2685.  
  2686.                                TOP is position indicator, not a direction.
  2687.                                The desired word is probably UP.
  2688.  
  2689.  
  2690.                          error on line 173: menu  Stat  not recognized
  2691.  
  2692.                                Stat is not a menu name.  STATUS is.
  2693.  
  2694.  
  2695.                          error on line 173: procedure GO not recognized
  2696.  
  2697.                                Go is a valid switch, but it does not name
  2698.                                a defined procedure, which is what is required
  2699.                                here.
  2700.  
  2701.                          The examples above do not cover all possible
  2702.                          situations and token-types.
  2703.  
  2704.  
  2705.             missing
  2706.             script
  2707.             file       : This is not an error.  The 'missing ROTOR20.SCR'
  2708.                          message is just an informative warning.  It is
  2709.                          perfectly acceptable to use ROTOR(tm) without the
  2710.                          accompanying script file.
  2711.  
  2712.             script
  2713.             language
  2714.             limitations
  2715.                        : The following language limitations may also cause
  2716.                          errors:
  2717.  
  2718.                          Maximum number of defined procedures/macros = 40;
  2719.                          Maximum Identifier length   = 15;
  2720.                          Maximum Message Length      = 40;
  2721.                          Maximum number of arguments = 30;
  2722.  
  2723.  
  2724.             
  2725.             --------------------------------------------------------------------
  2726.             ROTOR(tm)    Programming : debugging tools                   10 - 17
  2727.             --------------------------------------------------------------------
  2728.  
  2729.  
  2730.                          Two types of programming errors can be distinguished:
  2731.                          syntax errors, and logic errors.
  2732.  
  2733.                          A syntax error is essentially a grammar error.  A
  2734.                          syntactically incorrect statement does not comply with
  2735.                          the rules that dictate how such a statement should be
  2736.                          formed.  The cause of the problem may be a missing
  2737.                          argument, a misspelled word, etc...
  2738.  
  2739.                          The ROTOR(tm) script-loader automatically detects all
  2740.                          syntax errors.  When a script loads to memory
  2741.                          completely and without any error message interruptions,
  2742.                          it is syntactically correct.
  2743.  
  2744.                          A Logic error exists when the statements in a script
  2745.                          do not accomplish what they are intented for.
  2746.                          This kind of error is usually caused by poor thinking.
  2747.                          The programmer has not considered the task at hand
  2748.                          properly.  His code does not address some facet of
  2749.                          the job.  Or perhaps he is doing too much.  And of
  2750.                          course, there is always the possibility of a misapplied
  2751.                          command, due to false assumptions or incomplete
  2752.                          instructions.
  2753.  
  2754.                          Unfortunately, the ROTOR(tm) script-loader does not
  2755.                          detect logic errors.  It assumes that the programmer
  2756.                          knows what he/she is doing.
  2757.  
  2758.                          The programmer must use his/her own ingenuity to
  2759.                          fix logic errors.
  2760.  
  2761.                          Locating the source of the trouble is often the hardest
  2762.                          part of the problem.   When used thoughtfully, the
  2763.                          following script commands can help isolate logic flaws:
  2764.  
  2765.  
  2766.             DEBUG      : Use this keyword command to watch a macro or procedure
  2767.                          as it steps thru its statements.  DEBUG is a toggle.
  2768.                          When ON, statements are displayed as they are executed.
  2769.                          DEBUG is best used over short sections of code, as
  2770.                          shown below:
  2771.  
  2772.                                     <OK code>
  2773.                                     DEBUG ON
  2774.                                     <suspect code>
  2775.                                     DEBUG OFF
  2776.                                     <rest of code>
  2777.  
  2778.             
  2779.             SHOW       : Use this command to examine a parameter, switch or
  2780.                          variable.   Internal changes caused by statement
  2781.                          execution can be monitored via multiple SHOW commands.
  2782.  
  2783.                          example:   SHOW  parameter  Shape_tilt
  2784.                                     PAUSE
  2785.                                     INC   Shape_tilt 30
  2786.                                     SHOW  parameter  Shape_tilt
  2787.  
  2788.  
  2789.             MESSAGE    : When this command is executed, a message is displayed.
  2790.  
  2791.                          example:   MESSAGE  Press any key to continue.
  2792.  
  2793.  
  2794.             PAUSE      : Use this command to pause at a particular point in
  2795.                          the execution of a macro or procedure.  Execution
  2796.                          resumes normally when the user presses a key.
  2797.                          PAUSE is used in conjuction with output commands such
  2798.                          as SHOW and MESSAGE.   It provides 'reading-time'
  2799.                          when several output commands follow each other rapidly.
  2800.  
  2801.                          example:   SHOW  parameter  Shape_tilt
  2802.                                     PAUSE
  2803.                                     SHOW  parameter  Global_tilt
  2804.                                     PAUSE
  2805.  
  2806.             REPORT     : This command is used to request output of internal
  2807.                          data, for verification purposes.  Essentially,
  2808.                          ROTOR(tm) spits back out the script as it sees it.
  2809.                          If this internal view does not match the original
  2810.                          script, then we know that something isn't right.
  2811.  
  2812.                          The REPORT command should only be used in intialization
  2813.                          statements.  When placed inside a macro or procedure,
  2814.                          it is simply ignored.
  2815.  
  2816.                          The following reports are available:
  2817.  
  2818.                          FILE       : to output the current script filename.
  2819.                          MACROLIST  : to list all macros.
  2820.                          PROCLIST   : to list all macros and procedures.
  2821.                          CMDLIST    : to list the entire script.
  2822.                          DO_CALLS   : to display DO calls before executing them.
  2823.  
  2824.  
  2825.             
  2826.             --------------------------------------------------------------------
  2827.             ROTOR(tm)    Programming : Command reference guide           10 - 18
  2828.             --------------------------------------------------------------------
  2829.  
  2830.  
  2831.             order      : This guide lists the script language commands in
  2832.                          alphabetical order.
  2833.  
  2834.  
  2835.             symbols    : Special symbols are used to express the command
  2836.                          syntax rules:
  2837.  
  2838.                          symbol  meaning
  2839.                          -------------------------------------------------------
  2840.  
  2841.                          |       or
  2842.                                  example: 'A | B'
  2843.                                    means: 'A or B'
  2844.  
  2845.                          [  ]    enclosed item is optional.
  2846.                                  example: '[A]'
  2847.                                    means: 'A is optional'
  2848.  
  2849.                          {  }    encloded item may be repeated 0 or more times.
  2850.                                  example: '{A}'
  2851.                                    means: 'A may be omitted, included, or
  2852.                                            repeated'
  2853.  
  2854.                          ::=     means 'consists of'.  It defines a substitution
  2855.                                  rule.  The item on the left side of the symbol
  2856.                                  may be replaced with the item(s) on the right.
  2857.                                  example: 'A ::= B C'
  2858.                                    means: 'A consists of B followed by C'
  2859.  
  2860.             case is
  2861.             significant
  2862.                        :
  2863.                          Rule elements shown in UPPER case are words which
  2864.                          may appear in actual statements.
  2865.  
  2866.                          Rule elements shown in lower case must be substituted
  2867.                          with other words.  They may NOT appear in actual
  2868.                          statements.
  2869.  
  2870.  
  2871.             entryof()  : This notation is used to refer to a menu entry.
  2872.                          Example:
  2873.  
  2874.                             parameter_name ::= entryof( parameters menu )
  2875.  
  2876.  
  2877.             
  2878.             --------------------------------------------------------------------
  2879.             ROTOR(tm)    Programming : Reference guide                   10 - 18
  2880.             --------------------------------------------------------------------
  2881.  
  2882.             BEEP
  2883.             syntax     : BEEP
  2884.                          no parameters
  2885.  
  2886.             purpose    : Sounds a short warning 'beep'.
  2887.  
  2888.  
  2889.             CYCLE
  2890.             syntax     : CYCLE  n
  2891.                          where  n ::= value_term
  2892.  
  2893.             purpose    : Executes n cycles before proceeding to the
  2894.                          next statement.
  2895.  
  2896.  
  2897.             DEBUG
  2898.             syntax     : DEBUG  stat
  2899.                          where  stat ::= boolean_cmd
  2900.  
  2901.             purpose    : Sets the debug flag ON or OFF
  2902.                          While ON, statements are displayed prior to execution.
  2903.  
  2904.             see also   : MESSAGE, PAUSE, REPORT, SHOW
  2905.  
  2906.  
  2907.             DEC
  2908.             syntax     : DEC    item  [n]
  2909.                          where  item   ::= parameter_name | variable_name
  2910.                                 n      ::= value_term
  2911.  
  2912.             purpose    : Decrements a parameter or variable by n.
  2913.                          The n argument is optional.  When omitted,
  2914.                          the variable is decremented by 1.
  2915.  
  2916.             see also   : SET, INC, JITTER, MINIMIZE, MAXIMIZE.
  2917.  
  2918.  
  2919.             DEFAULTS
  2920.             syntax     : DEFAULTS
  2921.                          no parameters
  2922.  
  2923.             purpose    : Sets the current object state to a buit-in default
  2924.                          state.
  2925.  
  2926.             
  2927.             DELETE
  2928.             syntax     : DELETE area_to_delete
  2929.                          where  area_to_delete ::= entryof( delete menu )
  2930.  
  2931.             purpose    : Erases all or part of the workarea.  The selected
  2932.                          area is replaced by a solid 'background' color patch,
  2933.                          or a patterned one, depending on the state of the
  2934.                          YHATCH switch.
  2935.  
  2936.  
  2937.             DO
  2938.             syntax     : DO proc_name
  2939.                          where  proc_name    ::= entryof( declared_block_names )
  2940.  
  2941.             purpose    : Executes the named procedure before proceeding to the
  2942.                          next statement.
  2943.  
  2944.             see also     DO .. UNTIL, IF .. DO, WHEN .. DO
  2945.  
  2946.  
  2947.             DO .. UNTIL
  2948.  
  2949.             syntax     : DO proc_name UNTIL condition(s)
  2950.                          where  proc_name    ::= entryof( declared_block_names )
  2951.                                 condition(s) ::= conditional_expr
  2952.  
  2953.             purpose    : Repeatedly executes the named procedure until the
  2954.                          condition(s) becomes true, before proceeding to the
  2955.                          next statement.
  2956.  
  2957.             see also     IF .. DO
  2958.  
  2959.  
  2960.             DONE
  2961.             syntax     : DONE
  2962.                          no parameters
  2963.  
  2964.             purpose    : Deactivates the macro-processor, thereby aborting
  2965.                          the current macro. Macros lacking a DONE statement are
  2966.                          repeatedly executed at each program cycle.
  2967.  
  2968.             see also     END, EXIT
  2969.  
  2970.  
  2971.  
  2972.             DUPLICATE
  2973.             syntax     : DUPLICATE
  2974.                          no parameters
  2975.  
  2976.             purpose    : Creates a copy of the current object.
  2977.  
  2978.             see also   : NEW, KILL, NEXT, PREVIOUS
  2979.  
  2980.             
  2981.             END
  2982.             syntax     : END
  2983.                          no parameters
  2984.  
  2985.             purpose    : Marks the end of a macro or procedure definition.
  2986.  
  2987.                          When the macro-processor reaches the END statement
  2988.                          of a procedure, it proceeds to the next statement
  2989.                          of the calling block.
  2990.  
  2991.                          When the macro-processor reaches the END statement
  2992.                          of a macro, it returns program-control to the user for
  2993.                          the remainder of the current cycle.  The macro remains
  2994.                          active and will re-execute at the beginning of the
  2995.                          next program cycle.
  2996.  
  2997.             see also   : DONE, EXIT
  2998.  
  2999.  
  3000.             EXIT
  3001.             syntax     : EXIT
  3002.                          no parameters
  3003.  
  3004.             purpose    : Partial execution of a macro or procedure.
  3005.  
  3006.                          Causes the macro-processor to ignore the remaining
  3007.                          statements in the macro or procedure.
  3008.  
  3009.             see also   : DONE, END
  3010.  
  3011.  
  3012.             IF .. DO
  3013.             syntax     : IF  condition(s)  DO proc_name
  3014.                          where condition(s)  ::= conditional_expr
  3015.                                proc_name     ::= entryof( declared_block_names )
  3016.  
  3017.             purpose    : Conditional execution of a macro or procedure
  3018.             example    : IF phase=2 AND fullsize DO explode
  3019.  
  3020.             see also   : WHEN .. DO
  3021.  
  3022.  
  3023.             IF .. DO DONE
  3024.  
  3025.             syntax     : IF  condition(s)  DO DONE
  3026.                          where condition(s)  ::= conditional_expr
  3027.  
  3028.             purpose    : Conditional termination of a macro
  3029.  
  3030.             
  3031.             IF .. DO EXIT
  3032.  
  3033.             syntax     : IF  condition(s)  DO EXIT
  3034.                          where condition(s)  ::= conditional_expr
  3035.  
  3036.             purpose    : Conditional partial-execution of a macro or procedure.
  3037.  
  3038.  
  3039.             INC
  3040.             syntax     : INC    item  [n]
  3041.                          where  item   ::= parameter_name | variable_name
  3042.                                 n      ::= value_term
  3043.  
  3044.             purpose    : Increments a parameter or variable by n.
  3045.                          The n argument is optional.  When omitted,
  3046.                          the variable is incremented by 1.
  3047.  
  3048.             see also   : SET, DEC, JITTER, MINIMIZE, MAXIMIZE.
  3049.  
  3050.  
  3051.             JITTER
  3052.             syntax     : JITTER  item  n
  3053.                          where   item  ::= parameter_name | variable_name
  3054.                                  n     ::= value_term
  3055.  
  3056.             purpose    : Randomly adjusts item by at most n.  The adjustment
  3057.                          is either an increment or a decrement.
  3058.  
  3059.             see also   : DEC, INC, MAXIMIZE, MINIMIZE, SET.
  3060.  
  3061.  
  3062.             KILL
  3063.             syntax     : KILL
  3064.                          no parameters
  3065.  
  3066.             purpose    : Destroys the current object, if it is not the only one.
  3067.  
  3068.             see also   : NEW, DUPLICATE, NEXT, PREVIOUS
  3069.  
  3070.  
  3071.             MACRO
  3072.             syntax     : MACRO block_name
  3073.                          where block_name is a string of up to 15 characters.
  3074.                                It must be a unique name, ie one that does not
  3075.                                already apply to another macro or procedure.
  3076.  
  3077.             purpose    : Marks the begining of a macro definition.
  3078.  
  3079.             see also   : PROCEDURE, END
  3080.  
  3081.             
  3082.             MAXIMIZE
  3083.             syntax     : MAXIMIZE  item
  3084.                          where  item  ::= parameter_name
  3085.  
  3086.             purpose    : Set a parameter to its maximum value.
  3087.  
  3088.             see also   : DEC, INC, JITTER, MINIMIZE, SET.
  3089.  
  3090.  
  3091.             MENU
  3092.             syntax     : MENU   menu_name
  3093.                          where  menu_name ::= entryof( list-of-menus )
  3094.             purpose    : Request a menu change.
  3095.  
  3096.                          If the menu_name identifier correponds to a top menu,
  3097.                          then the top menu is changed.  Otherwise, the bottom
  3098.                          menu is changed.
  3099.  
  3100.                          The menu change is executed at the end of the
  3101.                          current cycle, NOT during macro processing.
  3102.  
  3103.  
  3104.             MESSAGE
  3105.             syntax     : MESSAGE message_text
  3106.                          where   message_text is a string of at most
  3107.                                  40 characters.
  3108.  
  3109.             purpose    : Displays a single-line message.
  3110.                          For multi-line messages, use multiple MESSAGE
  3111.                          statements separated by PAUSEs.
  3112.  
  3113.             see also   : DEBUG, PAUSE, REPORT, SHOW
  3114.  
  3115.  
  3116.             MINIMIZE
  3117.             syntax     : MINIMIZE  item
  3118.                          where  item  ::= parameter_name | variable_name
  3119.  
  3120.             purpose    : Set a parameter or variable to its minimum value.
  3121.  
  3122.             see also   : DEC, INC, JITTER, MAXIMIZE, SET.
  3123.  
  3124.             
  3125.             MOVE
  3126.             syntax     : MOVE  item  direction  [ Nsteps ]
  3127.                          where item      ::= CURSOR | ZONE
  3128.                                direction ::= U&L   | UP    | U&R   |
  3129.                                              LEFT  | NC    | RIGHT |
  3130.                                              D&L   | DOWN  | D&R   |
  3131.                                              INC45 | DEC45 | INC90 | DEC90 |
  3132.                                              OPPOSITE | OTHERSIDE | OTHERWISE
  3133.  
  3134.                                Nsteps    ::= value_term
  3135.  
  3136.             purpose    : This is a dual purpose command.
  3137.  
  3138.                          When Nsteps is omitted, MOVE changes the direction
  3139.                          of travel to 'direction'.  It does NOT change the
  3140.                          position of the item.
  3141.  
  3142.                          When Nsteps is provided, the item is moved N steps
  3143.                          in N the 'direction' indicated.  It does not change
  3144.                          the item's direction of travel in any permanent way.
  3145.  
  3146.             example    : MOVE  CURSOR UP
  3147.                          CYCLE 2
  3148.                          MOVE  CURSOR LEFT 3
  3149.  
  3150.                          The first MOVE directs the cursor to travel upwards.
  3151.                          The second MOVE shifts the cursor three steps to the
  3152.                          left.  The cursor is then free to resume its upward
  3153.                          motion.
  3154.  
  3155.             directions : LEFT, RIGHT, DOWN, UP : for cardinal directions
  3156.                          U&L | U&R | D&L | D&R : for diagonal movement
  3157.                          NC        : No change.  Use current direction of travel
  3158.                          INC45     : Turn 45 degrees clock-wise
  3159.                          DEC45     : Turn 45 degrees counter-clock-wise
  3160.                          INC90     : Turn 90 degrees clock-wise
  3161.                          DEC90     : Turn 90 degrees counter-clock-wise
  3162.                          OPPOSITE  : for direction opposite to current one.
  3163.                          OTHERSIDE : go LEFT instead of RIGHT, and vice-versa.
  3164.                                      Vertical shift remains unchanged.
  3165.                                      example: U&L changes to U&R.
  3166.                          OTHERWISE : go DOWN instead of UP, and vice-versa.
  3167.                                      Horizontal shift remains unchanged.
  3168.                                      example: U&L changes to D&L.
  3169.  
  3170.             see also   : MOVE2XY, MOVEBY, POSITION, UPDATE
  3171.  
  3172.  
  3173.             
  3174.             MOVE2XY
  3175.             syntax     : MOVE2XY  item  Xcoord  Ycoord
  3176.                          where  item       ::= CURSOR | ZONE
  3177.                                 Xcoord     ::= value_term
  3178.                                 Ycoord     ::= value_term
  3179.  
  3180.             purpose    : Moves the CURSOR's center
  3181.                             or the ZONE's top-left corner
  3182.                          to the coordinates ( Xcoord , Ycoord ). (column,row)
  3183.                          The top-left corner of the workarea is (0,0)
  3184.  
  3185.             see also   : MOVE, MOVEBY, POSITION, UPDATE
  3186.  
  3187.  
  3188.             MOVEBY
  3189.             syntax     : MOVEBY item  dX  dY
  3190.                          where  item       ::= CURSOR | ZONE
  3191.                                 dX         ::= value_term
  3192.                                 dY         ::= value_term
  3193.  
  3194.             purpose    : Shifts item's position by dx,dy.
  3195.  
  3196.             see also   : MOVE, MOVE2XY, POSITION, UPDATE
  3197.  
  3198.  
  3199.             NEW
  3200.             syntax     : NEW
  3201.                          no parameters
  3202.  
  3203.             purpose    : Creates a new, random shape.
  3204.  
  3205.             see also   : DUPLICATE, KILL, NEXT, PREVIOUS
  3206.  
  3207.  
  3208.             NEXT
  3209.             syntax     : NEXT
  3210.                          no parameters
  3211.  
  3212.             purpose    : Shifts the CURSOR over to the next defined graphic
  3213.                          object.
  3214.  
  3215.             see also   : DUPLICATE, KILL, NEW, PREVIOUS
  3216.  
  3217.  
  3218.             OPTION
  3219.             syntax     : OPTION  option_name  stat
  3220.                          where   option_name ::= entryof( system-options menu )
  3221.                                  stat        ::=  boolean_cmd
  3222.  
  3223.             purpose    : To set a system option.
  3224.             example    : OPTION animfill ON
  3225.  
  3226.             
  3227.             PARAM
  3228.             syntax     : PARAM  parameter  value [ pulsestat [ pmode [ptep ] ] ]
  3229.                          where  parameter ::= parameter_name
  3230.                                 value     ::= value_term
  3231.                                 pulsestat ::= boolean_cmd
  3232.                                 pmode     ::= entryof( pulse-modes menu ) | NC
  3233.                                 pstep     ::= value_term
  3234.  
  3235.             purpose    : To set a parameter's value, and optionally, its pulse
  3236.                          attributes.
  3237.  
  3238.             see also   : PULSE, SWITCH, UPDATE
  3239.  
  3240.  
  3241.             PAUSE
  3242.             syntax     : PAUSE
  3243.                          no parameters
  3244.  
  3245.             purpose    : Waits for a user-keypress.
  3246.  
  3247.             see also   : DEBUG, MESSAGE, REPORT, SHOW
  3248.  
  3249.  
  3250.             POSITION
  3251.             syntax     : POSITION  item  position
  3252.                          where item     ::= CURSOR | ZONE
  3253.                                position ::= TL     | TOP     | TR    |
  3254.                                             LEFT   | CENTER  | RIGHT |
  3255.                                             BL     | BOTTOM  | BR
  3256.  
  3257.             purpose    : Moves the CURSOR or ZONE to the location described
  3258.                          by position:  BL     = bottom left corner of box
  3259.                                        BOTTOM = bottom edge of box
  3260.                                        BR     = bottom right corner of box
  3261.                                        LEFT   = left edge of box
  3262.                                        CENTER = center of box
  3263.                                        RIGHT  = right edge of box
  3264.                                        TL     = top-left corner of box
  3265.                                        TOP    = top edge of box
  3266.                                        TR     = top-right corner of box
  3267.                          When positioning the CURSOR, box = zone.
  3268.                          When positioning the ZONE,   box = workarea.
  3269.  
  3270.             see also   : MOVE, MOVE2XY, UPDATE
  3271.  
  3272.  
  3273.             PREVIOUS
  3274.             syntax     : PREVIOUS
  3275.                          no parameters
  3276.  
  3277.             purpose    : Shifts the CURSOR over to the previous graphic object.
  3278.  
  3279.             see also   : DUPLICATE, KILL, NEW, NEXT
  3280.  
  3281.             
  3282.             PROCEDURE
  3283.             syntax     : PROCEDURE block_name
  3284.                          where block_name is a user-defined string of
  3285.                          at most 15 characters. It must be a unique name,
  3286.                          ie one that is not already use by another macro or
  3287.                          procedure.
  3288.  
  3289.             purpose    : Marks the begining of a procedure definition.
  3290.  
  3291.             see also   : MACRO, END
  3292.  
  3293.  
  3294.             PULSE
  3295.             syntax     : PULSE  switch_name  pulsestat [ pmode [pstep ] ]
  3296.                          where  switch_name ::= entryof( switch_list menu )
  3297.                                 pulsestat   ::= boolean_cmd
  3298.                                 pmode       ::= entryof( pulse-modes menu ) | NC
  3299.                                 pstep       ::= value_term
  3300.  
  3301.             purpose    : To pulse the attribute controlled by a switch.
  3302.  
  3303.                          Both the switch and its pulse-toggle are set to
  3304.                          pulsestat.
  3305.  
  3306.             see also   : PARAM, SWITCH, UPDATE
  3307.  
  3308.  
  3309.             REPORT
  3310.             syntax     : REPORT  reportname  boolean_literal
  3311.                          where   reportname      ::= MACROLIST | PROCLIST |
  3312.                                                      CMDLIST   | DO_CALLS | FILE
  3313.                                  boolean_literal ::= ON | OFF
  3314.  
  3315.             purpose    : To request output of internal data, for debbuging
  3316.                          purposes. The report is displayed one line at a
  3317.                          time, upon completion of the script-loading
  3318.                          operation, and only then.  Do not use REPORT in
  3319.                          procedures or macros.  To request several different
  3320.                          reports, use multiple REPORT statements.
  3321.  
  3322.                          FILE       : to output the current script filename.
  3323.                          MACROLIST  : to list all macros.
  3324.                          PROCLIST   : to list all macros and procedures.
  3325.                          CMDLIST    : to list the entire script.
  3326.                          DO_CALLS   : to display DO calls before executing them.
  3327.  
  3328.             see also   : DEBUG, MESSAGE, PAUSE, SHOW
  3329.  
  3330.  
  3331.             SET
  3332.             syntax     : SET    item  n
  3333.                          where  item  ::= parameter_name | variable_name
  3334.                                 n     ::= value_term
  3335.  
  3336.             purpose    : To set the value of item to n
  3337.  
  3338.             see also   : DEC, INC, JITTER, MINIMIZE, MAXIMIZE
  3339.  
  3340.             
  3341.             SIZE
  3342.             syntax     : SIZE  CURSOR cursor_sizing_cmd
  3343.                        | SIZE  ZONE zone_sizing_cmd
  3344.                        | SIZE  SHAPE shape_sizing_cmd
  3345.                          where cursor_sizing_cmd ::= entryof(cursor-sizing menu)
  3346.                                zone_sizing_cmd   ::= entryof( zone-sizing menu )
  3347.                                shape_sizing_cmd  ::= DOTSIZE | FULLSIZE
  3348.  
  3349.             purpose    : To resize the CURSOR, ZONE or SHAPE.
  3350.                          The item center remains stationary.
  3351.  
  3352.  
  3353.             SHOW
  3354.             syntax     : SHOW  SWITCH switch_name
  3355.                        | SHOW  PARAMETER parameter_name
  3356.                        | SHOW  VARIABLE variable_name
  3357.                          where switch_name       ::= entryof( switch-list menu )
  3358.                                parameter_name    ::= entryof( parameters menu )
  3359.                                variable_name     ::= PHASE | COUNT | ACTIVE
  3360.  
  3361.             purpose    : To display the current state/value of a switch,
  3362.                          parameter or variable, and related information.
  3363.  
  3364.             see also   : DEBUG, MESSAGE, PAUSE, REPORT
  3365.  
  3366.  
  3367.             STAMP
  3368.             syntax     : STAMP
  3369.                          no parameters
  3370.  
  3371.             purpose    : Draws the current shape, using its current attributes,
  3372.                          at its current screen location.
  3373.  
  3374.  
  3375.             SWITCH
  3376.             syntax     : SWITCH  name stat [ mode [ value ] ]
  3377.                          where   switch_name ::= entryof( switch-list menu )
  3378.                                  stat        ::= boolean_cmd
  3379.                                  mode        ::= entryof( switch mode-menu )| NC
  3380.                                  value       ::= value_term
  3381.  
  3382.             purpose    : To set the state of a switch, and optionally,
  3383.                          its mode and the value of the parameter it controls.
  3384.  
  3385.                          Some switches do not have a set of modes to chose from.
  3386.                          They will only accept a NC mode parameter.
  3387.                          Some switches do not control a parameter, and therefore
  3388.                          will not accept a value parameter.
  3389.  
  3390.             see also   : PARAM, PULSE, UPDATE
  3391.  
  3392.  
  3393.             
  3394.             TURN
  3395.             syntax     : TURN   angle
  3396.                          where  angle ::= value_term
  3397.  
  3398.             purpose    : To change the angle of travel.
  3399.                          Use a positive angle for a clockwise turn.
  3400.                          Use a negative angle for a counter-clockwise turn.
  3401.  
  3402.  
  3403.             UPDATE
  3404.             syntax     : UPDATE
  3405.                          no parameters
  3406.  
  3407.             purpose    : To update the current object to reflect changes
  3408.                          requested by prior statements.
  3409.  
  3410.  
  3411.             WHEN ..DO
  3412.  
  3413.             syntax     : WHEN  condition(s)    DO  proc_name
  3414.                          where condition(s)  ::= conditional_expr
  3415.                                proc_name     ::= entryof( declared_block_names )
  3416.  
  3417.             purpose    : Conditional execution of a procedure.
  3418.  
  3419.                          Increments the PHASE variable  prior to executing
  3420.                          the DO call.  This is the only difference between
  3421.                          IF .. DO and WHEN .. DO
  3422.  
  3423.             see also   : IF .. DO
  3424.  
  3425.  
  3426.             WHEN .. DO DONE
  3427.  
  3428.             syntax     ,
  3429.             purpose    : same as IF .. DO DONE
  3430.  
  3431.             WHEN .. DO EXIT
  3432.  
  3433.             syntax     ,
  3434.             purpose    : same as IF .. DO EXIT
  3435.                          PHASE is NOT incremented.
  3436.  
  3437.             
  3438.             --------------------------------------------------------------------
  3439.             ROTOR(tm)    Grammar terminology                             10 - 19
  3440.             --------------------------------------------------------------------
  3441.  
  3442.  
  3443.  
  3444.             grammar    : A grammar is a set of rules which describes precisely
  3445.                          and clearly how characters and words may be put
  3446.                          together to form understandable and meaningful
  3447.                          sentences.
  3448.  
  3449.                          Every language has a grammar.  English, french,
  3450.                          spanish, latin,  greek, all require mastery of specific
  3451.                          rules for phrase construction.
  3452.  
  3453.                          Programming languages are no exception.  They do not
  3454.                          allow random combinations of symbols, but instead
  3455.                          expect orderly sequences of well-chosen words.
  3456.  
  3457.  
  3458.  
  3459.             rules      : The rules of most grammars concern themselves with two
  3460.                          simple concepts: the sequential ordering of elements,
  3461.                          and element substitutions.
  3462.  
  3463.                          For instance, in english, most phrases consist of
  3464.                          a subject, followed by a verb, followed by an object.
  3465.                          We can write this as a rule:
  3466.  
  3467.                          phrase ::=  subject  verb  object
  3468.  
  3469.                          According to this rule, 'I love you' is a valid
  3470.                          sentence, but 'I you love' is not correct.  The
  3471.                          ordering of the phrase elements must match that of rule
  3472.                          components.
  3473.  
  3474.                          Also, we note that the rule components are not used
  3475.                          literally.  Instead they are substituted with instances
  3476.                          of the categories they represent.  'Subject' becomes
  3477.                          'I',  'verb' is replaced by 'love', and 'object' is
  3478.                          substituted with 'you'.
  3479.  
  3480.             
  3481.             rule
  3482.             structure :  All grammars consist of many rules such as that shown
  3483.                          above.  These rules, called productions, all consist
  3484.                          of:
  3485.  
  3486.                          + A production symbol (::=).
  3487.  
  3488.                          + A non-terminal symbol on the left-hand side of the
  3489.                            production symbol.
  3490.  
  3491.                          + A sequence of zero or more terminal or non-terminal
  3492.                            symbols on the right-hand side of the production
  3493.                            symbol.
  3494.  
  3495.                          Each production is essentially a SUBSTITUTION rule,
  3496.                          which states that any occurance the left side of the
  3497.                          production may be expanded into the sequence shown on
  3498.                          the right side.
  3499.  
  3500.  
  3501.             terminal
  3502.             symbols    : Terminal symbols are character(s) or word(s) which
  3503.                          appear in the actual text of a sentence or program.
  3504.  
  3505.                          Terminal symbols only appear in the right-hand side of
  3506.                          productions.
  3507.  
  3508.                          By convention, we show terminal symbols in UPPER case.
  3509.  
  3510.             non
  3511.             terminal
  3512.             symbols    : Non-terminal symbols are category labels which denote a
  3513.                          sequence or choice of symbols.
  3514.  
  3515.                          Non-terminal symbols may appear on either side of a
  3516.                          production symbol, but every non-terminal must appear
  3517.                          at least once on the left-hand side of production,
  3518.                          as it must be defined.
  3519.  
  3520.                          By convention, we show non-terminals in lower case.
  3521.  
  3522.             valid
  3523.             text       : Correct sentences and working programs comprise
  3524.                          terminal symbols ONLY.
  3525.  
  3526.             starting
  3527.             symbol     : This is a non-terminal symbol representing the set
  3528.                          of all valid texts.  This is usually an infinite set.
  3529.  
  3530.                          Every possible valid text can be derived from this
  3531.                          starting symbol by applying substitution rules until
  3532.                          only terminal symbols remain.
  3533.  
  3534.             
  3535.             love poem
  3536.             example    : The following love-poem grammar illustrates the
  3537.                          concepts of starting and terminal symbols:
  3538.  
  3539.                          1 - love-poem ::=  phrase exclaim
  3540.                                             phrase exclaim
  3541.                          2 - phrase    ::=  subject LOVE object.
  3542.                          3 - subject   ::=  I
  3543.                          4 - object    ::=  YOU | THEE
  3544.                          5 - exclaim   ::=  REALLY! | TRUELY!
  3545.                          The '|' symbol means 'or'.
  3546.  
  3547.                          To write a poem which complies with these rules, we
  3548.                          begin with the starting symbol, love-poem.
  3549.  
  3550.                          start        :   love-poem
  3551.  
  3552.                          apply rule #1:   phrase exclaim
  3553.                                           phrase exclaim
  3554.  
  3555.                          apply rule #2:   subject LOVE object. exclaim
  3556.                                           subject LOVE object. exclaim
  3557.  
  3558.                          apply rule #3:   I LOVE object. exclaim
  3559.                                           I LOVE object. exclaim
  3560.  
  3561.                          apply rule #4:   I LOVE YOU. exclaim
  3562.                                           I LOVE THEE. exclaim
  3563.  
  3564.                          apply rule #5:   I LOVE YOU. REALLY!
  3565.                                           I LOVE THEE. TRUELY!
  3566.  
  3567.                          We are done.  All the terms are terminal symbols.
  3568.                          Our creation is a valid 'love-poem', as it has been
  3569.                          'derived' from the starting symbol by application of
  3570.                          the grammar's rules.
  3571.  
  3572.             
  3573.             --------------------------------------------------------------------
  3574.             ROTOR(tm)    BNF notation                                    10 - 20
  3575.             --------------------------------------------------------------------
  3576.  
  3577.  
  3578.             BNF
  3579.             notation   : BNF (Backus-Naur Form) notation is a formalism used to
  3580.                          express the rules of a language grammar.
  3581.  
  3582.                          BNF is not complicated.  It is widely used throughout
  3583.                          the software industry, because of its simplicity.
  3584.                          Chances are you are already familiar with some of
  3585.                          it.
  3586.  
  3587.             symbols    : In the BNF world, everything is a symbol.  Three kinds
  3588.                          of symbols can be distinguished:
  3589.  
  3590.                          + terminal symbols (words that appear in actual text).
  3591.                          + non-terminal symbols (word categories, NOT text).
  3592.                          + meta-symbols (see below).
  3593.  
  3594.             meta
  3595.             symbols    : These are special BNF notation characters which are
  3596.                          used to define symbols in terms of other symbols.
  3597.  
  3598.                          The meta-symbols are:
  3599.  
  3600.                          ::=  This is the definition operator. It means
  3601.                               'consists of'.  It is called the 'production
  3602.                               symbol'.
  3603.  
  3604.                          |    This the 'or' operator.  It is used to
  3605.                               construct lists of alternatives.
  3606.  
  3607.                          [ ]  When an item is enclosed in square brackets,
  3608.                               it is optional.
  3609.  
  3610.                          { }  Curly braces indicate that the item(s) which they
  3611.                               enclose may be omitted, included or even repeated
  3612.                               multiple times.  Stated another way, the enclosed
  3613.                               item(s) may be repeated 0 or more times.
  3614.  
  3615.                          Meta-symbols do NOT appear in the actual text of a
  3616.                          valid program.
  3617.  
  3618.             production
  3619.             examples   : name  ::= title  first_name [middle_Initial] last_name
  3620.                          title ::= Mr. | Mrs. | Ms.
  3621.  
  3622.                          The 'middle_Initial' term is optional.
  3623.                          The 'title' term is NOT optional.  It MUST be replaced
  3624.                          with one of three alternatives: Mr., Mrs. or Ms.
  3625.                          A valid 'name' text might be:  'Mr. Michel Robert'
  3626.  
  3627.  
  3628.             
  3629.             --------------------------------------------------------------------
  3630.             ROTOR(tm)    Script language definitions (BNF)               10 - 21
  3631.             --------------------------------------------------------------------
  3632.  
  3633.  
  3634.                          This section formally defines the ROTOR(tm) script
  3635.                          language using BNF (Backus-Naur Form) notation.
  3636.  
  3637.                          It documents the language more concisely and rigorously
  3638.                          than the rest of this chapter.  It is the 'official'
  3639.                          definition of the language and its grammar.
  3640.  
  3641.                          The following conventions are observed:
  3642.  
  3643.             case is
  3644.             significant
  3645.                        :
  3646.                          For increased production rule legibility, we use
  3647.                          UPPER case for terminal symbols, and lower case only
  3648.                          for non-terminals.
  3649.                          
  3650.                          In other words, upper case indicates a word which may
  3651.                          be used directly in a script statement.  Lower case
  3652.                          terms require substitution.
  3653.  
  3654.                          In actual usage, terminal symbols may be written in
  3655.                          lower case, as the ROTOR(tm) script language is
  3656.                          case-insensitive.  It accepts upper and lower case
  3657.                          letters interchangeably.
  3658.  
  3659.  
  3660.             EOL        : The EOL (end-of-line) symbol is a special marker used
  3661.                          to end the current script line and start a new one.
  3662.  
  3663.                          An EOL marker appear at the end of every script
  3664.                          language statement.  As a result, each script line
  3665.                          consists of a single statement.  No statement may be
  3666.                          split over several lines, and multiple statements may
  3667.                          not be included on a single line.
  3668.  
  3669.             muti-line
  3670.             productions
  3671.                        : When a production cannot be fit in a single line,
  3672.                          it extends over several lines.  The additional
  3673.                          lines are indented to indicate continuation.
  3674.  
  3675.                          It is important to note that layout of such a
  3676.                          production is NOT significant.  The corresponding
  3677.                          script text must usually fit on a single line.
  3678.  
  3679.             
  3680.  
  3681.             blank space
  3682.             between
  3683.             symbols    : When the right-hand side of a production is a sequence
  3684.                          of symbols, these are normally spaced apart from each
  3685.                          other.
  3686.  
  3687.                          The separating blank consists of at least one 'space'
  3688.                          character.  The exact length of the separating space
  3689.                          is not important.  Extra scrip-formatting spaces are
  3690.                          OK.
  3691.  
  3692.             concatenation
  3693.                        :
  3694.                          In a few exceptional cases, ALL the symbols on the
  3695.                          right hand-side of a production are expected to be
  3696.                          concatenated together into a single string of
  3697.                          characters. These productions are tagged with a
  3698.                          <concatenated> label, situated below the right-hand
  3699.                          side.
  3700.  
  3701.                          example:  integer_literal   ::= [ - ] digit { digit }
  3702.                                                          <concatenated>
  3703.  
  3704.  
  3705.             entryof()  : A script language symbols may be defined as one of the
  3706.                          entries of a ROTOR(tm) pop-up menu.  We use a special
  3707.                          'entryof()' meta symbol to define such symbols:
  3708.  
  3709.                             symbol ::= entryof( menu_name )
  3710.  
  3711.                          The production above is equivalent to:
  3712.  
  3713.                             symbol ::= ENTRY1 | ENTRY2 | ENTRY3 | .. | LASTENTRY
  3714.  
  3715.                          In other words, `symbol' may be expanded into any one
  3716.                          of the entries of the named menu.
  3717.  
  3718.  
  3719.                          
  3720.                          We now begin our definition of the ROTOR(tm) script
  3721.                          language:
  3722.  
  3723.             special
  3724.             elements   : EOF               : This is the end-of-file marker.
  3725.                          EOL               : This is the end-of-line marker.
  3726.  
  3727.                          blankspace        : This is a string of space and/or
  3728.                                              tab characters.
  3729.  
  3730.                          comment           : This is any sequence of up to 80
  3731.                                              characters long.
  3732.  
  3733.                          message_text      : This a string of at most 40 chars.
  3734.  
  3735.                          block_name        : This is a unique word, at most 15
  3736.                                              characters long.
  3737.  
  3738.             symbols
  3739.             representing
  3740.             a menu
  3741.             entry      : switch_name       ::= entryof( switch-list menu )
  3742.                          parameter_name    ::= entryof( parameters menu )
  3743.                          area_to_delete    ::= entryof( delete menu )
  3744.                          menu_name         ::= entryof( list of menus )
  3745.                          option_name       ::= entryof( system_options menu )
  3746.                          pmode             ::= entryof( pulse-modes-menu ) | NC
  3747.                          proc_name         ::= entryof( declared_block_names )
  3748.                          cursor_sizing_cmd ::= entryof( cursor-sizing-menu)
  3749.                          zone_sizing_cmd   ::= entryof( zone-sizing-menu )
  3750.  
  3751.                          switch_mode       ::= entryof( switch-mode-menu ) | NC
  3752.                          (Please note that each switch has a its own mode-menu)
  3753.  
  3754.  
  3755.             script file
  3756.             construction
  3757.                        : scripfile         ::= script EOF
  3758.  
  3759.                          script            ::= { program_block | statement_line}
  3760.  
  3761.                          program_block     ::= block_type  block_name  EOL
  3762.                                                { statement_line }
  3763.                                                END EOL
  3764.  
  3765.                          block_type        ::= MACRO | PROCEDURE
  3766.                                         
  3767.                          some_act          ::= proc_name | DONE | EXIT
  3768.  
  3769.                          statement_line    ::= statement EOL
  3770.  
  3771.  
  3772.             
  3773.             statement
  3774.             construction
  3775.                        : statement         ::=
  3776.  
  3777.                             BEEP
  3778.                          |  CYCLE     value_term
  3779.                          |  DEBUG     boolean_cmd
  3780.                          |  DEC       var_or_par_name [value_term]
  3781.                          |  DEFAULTS
  3782.                          |  DELETE    area_to_delete
  3783.                          |  DO        proc_name [UNTIL conditional_expr]
  3784.                          |  DONE
  3785.                          |  DUPLICATE
  3786.                          |  EXIT
  3787.                          |  IF        conditional_expr DO some_act
  3788.                          |  INC       var_or_par_name [value_term]
  3789.                          |  JITTER    var_or_par_name [value_term]
  3790.                          |  KILL
  3791.                          |  MAXIMIZE  parameter_name
  3792.                          |  MENU      menu_name
  3793.                          |  MESSAGE   message_text
  3794.                          |  MINIMIZE  var_or_par_name
  3795.                          |  MOVE      c_or_z  direction [value_term]
  3796.                          |  MOVE2XY   c_or_z  value_term value_term
  3797.                          |  MOVEBY    c_or_z  value_term value_term
  3798.                          |  NEW
  3799.                          |  NEXT
  3800.                          |  OPTION    option_name  boolean_cmd
  3801.                          |  PARAM     parameter_name value_term
  3802.                                       [ boolean_cmd [ pmode [value_term] ] ]
  3803.                          |  PAUSE
  3804.                          |  POSITION  c_or_z  position
  3805.                          |  PREVIOUS
  3806.                          |  PULSE     switch_name boolean_cmd
  3807.                                       [ pmode [value_term] ]
  3808.                          |  REPORT    reportname  boolean_literal
  3809.                          |  SET       var_or_par_name  value_term
  3810.                          |  SIZE      CURSOR    cursor_sizing_cmd
  3811.                          |  SIZE      ZONE      zone_sizing_cmd
  3812.                          |  SIZE      SHAPE     shape_sizing_cmd
  3813.                          |  SHOW      SWITCH    switch_name
  3814.                          |  SHOW      PARAMETER parameter_name
  3815.                          |  SHOW      VARIABLE  variable_name
  3816.                          |  STAMP
  3817.                          |  SWITCH    switch_name boolean_cmd
  3818.                                       [ switch_mode [value_term] ]
  3819.                          |  TURN      value_term
  3820.                          |  UPDATE
  3821.                          |  WHEN      conditional_expr DO  some_act
  3822.                          |  .         comment
  3823.                          |            blankspace
  3824.  
  3825.             
  3826.             miscellanious
  3827.             vocabulary :
  3828.  
  3829.                          c_or_z            ::= CURSOR | ZONE
  3830.  
  3831.                          position          ::= TL   | TOP    | TR
  3832.                                              | LEFT | CENTER | RIGHT
  3833.                                              | BL   | BOTTOM | BR
  3834.                                            
  3835.                          direction         ::= U&L   | UP    | U&R
  3836.                                              | LEFT  | NC    | RIGHT
  3837.                                              | D&L   | DOWN  | D&R
  3838.                                              | INC45 | DEC45
  3839.                                              | INC90 | DEC90
  3840.                                              | OPPOSITE  | OTHERSIDE | OTHERWISE
  3841.  
  3842.                          reportname        ::= FILE    | MACROLIST | PROCLIST
  3843.                                              | CMDLIST | DO_CALLS
  3844.  
  3845.                          shape_sizing_cmd  ::= DOTSIZE | FULLSIZE
  3846.  
  3847.  
  3848.             value_term
  3849.             construction
  3850.                        :
  3851.  
  3852.                          digit             ::= 1 | 2 | 3 | 4 | 5
  3853.                                              | 6 | 7 | 8 | 9 | 0
  3854.  
  3855.                          integer_literal   ::= [ - ] digit { digit }
  3856.                                                <concatenated>
  3857.  
  3858.                          variable_name     ::= PHASE | COUNT | ACTIVE
  3859.  
  3860.                          var_or_par_name   ::= parameter_name | variable_name
  3861.  
  3862.                          var_or_par_value  ::= %var_or_par_name%
  3863.                                                <concatenated>
  3864.  
  3865.                          parameter_pstep   ::= %~parameter_name%
  3866.                                                <concatenated>
  3867.  
  3868.                          value_term        ::= integer_literal
  3869.                                              | var_or_par_value
  3870.                                              | parameter_pstep
  3871.  
  3872.  
  3873.             
  3874.             comparison
  3875.             construction
  3876.                        :
  3877.  
  3878.                          comparison_op     ::=  <> | = | < | > | <= | >=
  3879.  
  3880.                          comparison        ::=  value_term  comparison_op  value_term
  3881.                                                 <concatenated>
  3882.  
  3883.             boolean_term
  3884.             construction
  3885.                        :
  3886.  
  3887.                          boolean_literal   ::= ON | OFF
  3888.  
  3889.                          test              ::= TL    | TOP      | TR
  3890.                                              | LEFT  | CENTER   | RIGHT
  3891.                                              | BL    | BOTTOM   | BR
  3892.                                              | LEVEL | FULLSIZE | DOTSIZE
  3893.                                              | KEYPRESS
  3894.  
  3895.                          switch_stat       ::= [switch_name]
  3896.                                                <concatenated>
  3897.  
  3898.                          switch_Pulse_stat ::= [~switch_name]
  3899.                                                <concatenated>
  3900.  
  3901.                          boolean           ::= boolean_literal
  3902.                                              | test
  3903.                                              | switch_stat
  3904.                                              | switch_Pulse_stat
  3905.  
  3906.                          boolean_term      ::= [NOT'] boolean
  3907.                                                <concatenated>
  3908.  
  3909.                          boolean_cmd       ::= boolean_term | NC | TOGGLE
  3910.  
  3911.  
  3912.  
  3913.             conditional_expr
  3914.             construction
  3915.                        :
  3916.  
  3917.                          b_operator        ::= AND | OR
  3918.  
  3919.                          condition         ::= boolean_term | comparison
  3920.  
  3921.                          conditional_expr  ::= condition {b_operator condition}
  3922.  
  3923.  
  3924.             
  3925.             --------------------------------------------------------------------
  3926.             ROTOR(tm)    About ROTOR(tm) : The author            Appendix A - 01
  3927.             --------------------------------------------------------------------
  3928.  
  3929.  
  3930.             the
  3931.             author     : Michel Robert was born in 1958, in Long Island, New
  3932.                          York.  An architect by training, his interest in
  3933.                          design and construction has, over the years, drifted
  3934.                          away from the physical world of materials, to the more
  3935.                          cerebral cyberspace of microcomputers.  He is now
  3936.                          completing a Master's Degree in Computer Science at
  3937.                          Georgia State University.
  3938.  
  3939.                          His hobbies include photography, gardening, etchings,
  3940.                          movies, Tangerine Dream music and rubber monsters
  3941.                          of all kinds.
  3942.  
  3943.  
  3944.             --------------------------------------------------------------------
  3945.             ROTOR(tm)    About ROTOR(tm) : Program history       Appendix A - 02
  3946.             --------------------------------------------------------------------
  3947.  
  3948.  
  3949.             version
  3950.             0.90       : Released in February 1990.
  3951.                          This was the original shareware release.
  3952.                          The program took four months to write and document.
  3953.  
  3954.             version
  3955.             0.91:      : This bug-fix release corrected a problem with the 'Z'
  3956.                          character in typewriter-mode.  It also includes an
  3957.                          updated mailing address.
  3958.  
  3959.             version
  3960.             1.0        : Never released.
  3961.                          Instead, we began work on a 'next-generation' version
  3962.                          of ROTOR(tm).
  3963.  
  3964.             version
  3965.             2.0        : Released in the Fall of 1993.
  3966.                          This is not simply an updated version of ROTOR(tm).
  3967.                          It is a complete re-engineering of the program,
  3968.                          the result of a three-year development effort.
  3969.                          It introduces numerous innovative features, and
  3970.                          incorporates many of the suggestions which were put
  3971.                          forth by our users.
  3972.  
  3973.  
  3974.  
  3975.             
  3976.             --------------------------------------------------------------------
  3977.             ROTOR(tm)    About ROTOR(tm) : Resources             Appendix A - 03
  3978.             --------------------------------------------------------------------
  3979.  
  3980.                          ROTOR(tm) could not have been put together without the
  3981.                          assistance of world-class programming tools.  The
  3982.                          author acknowledges the considerable contributions of
  3983.                          the following software products:
  3984.  
  3985.             Borland
  3986.             International
  3987.  
  3988.                          Turbo Pascal 5.5 and 6.0  (TP)
  3989.  
  3990.                          ROTOR(tm) is written in Turbo Pascal and makes
  3991.                          intensive use of its object-oriented-programming
  3992.                          extensions.  ROTOR(tm) is such a large program that it
  3993.                          could not have been compiled without the protected
  3994.                          mode command-line compiler which is included in TP6.
  3995.  
  3996.                          Please note that ROTOR(tm) does not use any of the BGI
  3997.                          functions (Boreland Graphic Interface).
  3998.  
  3999.  
  4000.                          Turbo Debugger (TD)
  4001.  
  4002.                          No software development effort is free of
  4003.                          confrontations with annoying bugs.  While a little bit
  4004.                          of detective work will ferret out most bugs,  some are
  4005.                          so tricky as to be virtually undetectable without the
  4006.                          help of a debugging utility like Turbo Debugger.  TD
  4007.                          has been an invaluable ally in our periodic encounters
  4008.                          with such bugs.
  4009.  
  4010.                          In general, Boreland must be congratulated for the
  4011.                          excellence of its products.  They are technological
  4012.                          marvels.
  4013.  
  4014.  
  4015.             
  4016.             Genus Microprogramming
  4017.  
  4018.                          GX Kernel   2.0,
  4019.                          GX graphix  2.0,
  4020.                          PCX toolkit 5.0
  4021.                          Copyright 1988-1992
  4022.  
  4023.                          The GX Kernel is the foundation of the GX development
  4024.                          toolkits.  It provides compatibility with a wide range
  4025.                          of video adapters and modes.
  4026.  
  4027.                          The GX graphic toolkt is a complete library of fast
  4028.                          assembly language graphic (drawing) functions.
  4029.  
  4030.                          The PCX toolkit provides all the tools necessary to
  4031.                          read and write PCX image files.  These are also
  4032.                          coded in assembly-language for maximum performance.
  4033.  
  4034.                          All three toolkits include interfaces for C, pascal,
  4035.                          basic, fortran and clipper programmers.  This
  4036.                          flexibility is astonishing.
  4037.  
  4038.                          ROTOR(tm) makes extensive use of all three toolkits.
  4039.                          It draws its ability to switch video modes from the
  4040.                          Kernel, its polygon drawing skills from the Graphics
  4041.                          toolkit, and its PCX functions from the PCX kit.
  4042.  
  4043.                          The technical support staff at GENUS has been very
  4044.                          kind to us.  We thank them for putting up with our
  4045.                          nagging questions and outright complaints.  We thank
  4046.                          them also for sending us bug-fixes and beta-versions
  4047.                          when these were necessary.
  4048.  
  4049.                          In general, Genus Microprogramming delivers
  4050.                          outstanding products and services. It deserves every
  4051.                          bit of praise it receives, and then more.
  4052.  
  4053.             
  4054.             Autumn Hill
  4055.             Software
  4056.             Incorporated
  4057.  
  4058.                        : Font Tools, Copyright 1990
  4059.  
  4060.                          This package includes a powerful GEM-font editor, and
  4061.                          a variety of sample fonts.  It also includes a C
  4062.                          functions library for font output.
  4063.  
  4064.                          This material helped us implement our font-handling
  4065.                          code, and provided us with an array of fonts for
  4066.                          use with ROTOR(tm).
  4067.  
  4068.  
  4069.             PKware     : PKLite Professional, the excutable file compressor.
  4070.                          Copyright 1990-1992
  4071.  
  4072.                          This remarkable utility compresses the ROTOR(tm)
  4073.                          executable file by 55%, to less than half its original
  4074.                          size.
  4075.  
  4076.                          The benefits of compression are threefold:
  4077.                          First, it increases your valuable disk space.
  4078.                          Second, it produces a program which loads itself
  4079.                          into memory faster than it would otherwise,
  4080.                          and finally, it protects our copyright by encrypting
  4081.                          the program code.
  4082.  
  4083.                          We take a moment here to remark that everybody in the
  4084.                          computing community is indebted to Phil Katz (PK are
  4085.                          his initials) for writing and freely disseminating his
  4086.                          ZIP compression utilities.  His current preeminence in
  4087.                          the field of code compression was not easily arrived
  4088.                          at.  In the late 1980's he was subjected to a vicious
  4089.                          legal assault over compression algorithms and the ARC
  4090.                          filename extension (which was then commonly used to
  4091.                          identify archived files).  Phil, we are glad to see
  4092.                          that you are back on your feet and doing well!
  4093.  
  4094.  
  4095.             Broderbund : The New Printshop Companion, Copyright 1990.
  4096.  
  4097.                          ROTOR(tm) supports the clip-art file-format originated
  4098.                          by this package.  We use this program to create and
  4099.                          edit our own clip-libraries.
  4100.  
  4101.             
  4102.             Spinnaker  : PFS:Write, version 2.0, Copyright 1991, $49.95
  4103.                          This little-known package is a remarkable graphical
  4104.                          word-processor for DOS.  It offers both text-mode and
  4105.                          graphic WYSIWYG editing, scalable fonts, compatibility
  4106.                          with PCX image files, a spell-checker, a thesaurus
  4107.                          and even an outliner.  We used it to `typeset'
  4108.                          this manual.
  4109.  
  4110.  
  4111.             Power Up!  : Labels Unlimited, version 3.0, Copyright 1988-1990.
  4112.                          This software package generates professional looking
  4113.                          labels of all types.  We use it to create diskette
  4114.                          labels, for both 5-1/4 and 3-1/2 disks.  We are very
  4115.                          pleased with the quality of the labels it produces.
  4116.  
  4117.                          Power-Up is an unusual mail-order outfit, in that it
  4118.                          develops many of the software programs which it
  4119.                          markets.  It has been remarkably successful with these
  4120.                          in-house products, all of which excel at producing
  4121.                          quality printed output.  We recommend that you try
  4122.                          their other packages as well, if you have not done so
  4123.                          yet.
  4124.  
  4125.             Hewlett
  4126.             Packard    : DeskJet printer, $350.00 at discount.
  4127.                          This is the printer we use in our office.  We are
  4128.                          extremely pleased with it.  It did not cost us an
  4129.                          arm-and-a-leg.  Its output-quality is superb.  It uses
  4130.                          cut-sheet copier paper instead of continuous feed
  4131.                          paper, and most importantly, it is nearly SILENT!!
  4132.                          It has improved our quality-of-life dramatically.
  4133.                          The old rattling dot-matrix printers used to drive us
  4134.                          crazy. Thanks, HP, for ending the torture!
  4135.  
  4136.                          We must add a tiny bit of criticism. HP promotes its
  4137.                          expensive ink cartridges heavily.  You're supposed
  4138.                          to throw them out when they run dry.  Actually, they
  4139.                          are re-usable.  A company called Repeat-o-Type markets
  4140.                          refill-ink bottles which work well with the standard
  4141.                          cartridges (NOT those with double capacity).  These
  4142.                          refill-packs are a great money saver. Give them a try!
  4143.  
  4144.             others     : We are grateful to the many programmers whose books,
  4145.                          articles, and code samples have helped us polish up
  4146.                          ROTOR(tm).  Please look-up the References Appendix
  4147.                          for specific books and magazine titles.
  4148.  
  4149.  
  4150.             
  4151.             --------------------------------------------------------------------
  4152.             ROTOR(tm)    References                                   Appendix B
  4153.             --------------------------------------------------------------------
  4154.  
  4155.             graphics
  4156.             programming:
  4157.  
  4158.                          In general, graphics-programming is not for the
  4159.                          faint-hearted.  It requires familiarity with
  4160.                          video hardware idiosyncrasies, file formats,
  4161.                          matrix mathematics,  and complex modeling algorithms.
  4162.                          If these things interest you, then you may want to
  4163.                          take a look at some of the following references.
  4164.  
  4165.                          Computer graphics, principles and practice.
  4166.                          by James Foley, Andries van Dam, S.Feiner, J.Hughes.
  4167.                          Copyright 1990, Addison-Wesley publishing. 1175 pages.
  4168.                          This is the `bible' of computer graphics.  It is
  4169.                          often used as a college textbook.  Well written and
  4170.                          beautifully illustrated, it covers a wide range of
  4171.                          subjects in detail, including the math involved.
  4172.  
  4173.                          Bit-Mapped Graphics
  4174.                          by Steve Rimmer.
  4175.                          Copyright 1990, Windcrest Books / McGraw-Hill
  4176.                          490 pages, $26.95
  4177.                          This book provides the C source code for reading and
  4178.                          writting a variety of graphic file formats.  It also
  4179.                          discusses video hardware, printing and dithering.
  4180.                          Mr Rimmer's writting style is a delight.
  4181.  
  4182.                          Graphical User Interface Programming
  4183.                          by Steve Rimmer.
  4184.                          Copyright 1992, Windcrest Books  / McGraw-Hill
  4185.                          425 pages, $24.95
  4186.                          This book provides the C source code for a variety of
  4187.                          GUI (graphical-user-interface) controls.  It also
  4188.                          discusses resources, fonts in particular.
  4189.  
  4190.                          Graphic File Formats
  4191.                          by David C. Kay and John R. Levine.
  4192.                          Copyright 1992, Windcrest Books  / McGraw-Hill
  4193.                          478 pages, $24.95
  4194.                          File-Format information is hard to come by.  This
  4195.                          book is a treasure-trove of detailed descriptions,
  4196.                          covering 20 major bitmap and vector image formats.
  4197.                          The book does NOT, however, provide any source code.
  4198.  
  4199.             
  4200.             image
  4201.             files:       The Graphic File Toolkit
  4202.                          by Steve Rimmer.
  4203.                          Copyright 1992, Addison-Wesley publishing.
  4204.                          335 pages, $29.95
  4205.                          This book is not at all about graphics programming.
  4206.                          It discusses the frustrations one encounters when
  4207.                          dealing with image files.   Identification problems,
  4208.                          viewing difficulties, conversion frustrations, etc..
  4209.                          It is really quite informative.  It also includes
  4210.                          Mr.Rimmer's shareware programs, The Graphic Workshop,
  4211.                          and Desktop Paint.
  4212.             PC
  4213.             programming:
  4214.                          PC Intern, The Encyclopedia of DOS programming Know How
  4215.                          by Michael Tischer
  4216.                          Copyright 1992, Abacus / Data Becker
  4217.                          1330 pages, $59.95
  4218.                          This two inch thick volume contains a wealth of
  4219.                          hardware programming details, covering: the clock, the
  4220.                          speaker, joysticks, the mouse, the keyboard, video
  4221.                          adapters and displays, BIOS, DOS, disk drives, hard
  4222.                          drives, ports, memory, device drivers, windows, TSRs,
  4223.                          and more.  Numerous code samples are included.  Each
  4224.                          program is provided in Basic, Pascal and C.  Some
  4225.                          modules are in assembly language.  This book is a great
  4226.                          time-saver.
  4227.  
  4228.             debugging  : Mastering Turbo debugger
  4229.                          Copyright 1990, Hayden Books.
  4230.                          620 pages, $29.95
  4231.                          This book is an invaluable introduction to the art of
  4232.                          debugging.  Common C , Pascal and Assembly bugs are
  4233.                          discussed.
  4234.  
  4235.  
  4236.             magazines  : PC Techniques, bi-monthly.
  4237.                          publisher: Keith Weiskkamp / Coriolis Group.
  4238.                          editor in chief: Jeff Duntemann
  4239.                          This magazine never fails to delight in one way or the
  4240.                          other.  There are handy 'HAX' for every programmer's
  4241.                          bag-of-tricks,  honest reviews, witty commentaries,
  4242.                          and well-written up-to-date articles.  The contributing
  4243.                          editors are among the best in the field, including
  4244.                          Michael Abrash, David Gerrold, and Tom Swan.  And
  4245.                          most importantly, Jeff Duntemann is a Turbo Pascal
  4246.                          fan.
  4247.  
  4248.                          Dr.Dobb's Journal, monthly.
  4249.                          M&T Publishing.
  4250.                          This is the 'continuing-education' material to which
  4251.                          most programmers subscribe.  The articles are
  4252.                          written by professionals who expect you to have
  4253.                          a good grasp of all the basics.  Not as much fun as
  4254.                          PC Techniques, and definitely not for beginners.
  4255.                          But the material is relevant and useful.
  4256.             
  4257.             writing
  4258.             shareware  : We frequently receive inquiries about shareware.
  4259.                          How does one go about marketing a shareware program?
  4260.                          How profitable is it?  To those of you interested
  4261.                          in these questions, we recommend the following book:
  4262.  
  4263.                          Writing & Marketing Shareware
  4264.                          by Steven Hudgik
  4265.                          Copyright 1992, Windcrest Books  / McGraw-Hill
  4266.                          315 pages, $18.95
  4267.                          Mr.Hudgik discusses distribution channels, advertising,
  4268.                          copyrights, trademarks, warranties and licenses,
  4269.                          software design and development, documentation, and
  4270.                          user-support.  Of particular interest is a survey
  4271.                          of shareware authors which reveals sales, pricing,
  4272.                          and packaging strategies.
  4273.  
  4274.  
  4275.             
  4276.             --------------------------------------------------------------------
  4277.             ROTOR(tm)    Legal considerations: Copyrights                 C - 01
  4278.             --------------------------------------------------------------------
  4279.  
  4280.  
  4281.  
  4282.             copyright  : All parts and versions of ROTOR(tm) are copyrighted by
  4283.                          Michel C. Robert, who reserves all rights not expressly
  4284.                          granted.
  4285.  
  4286.             other
  4287.             copyrights : ROTOR(tm) includes royalty-free copyrighted code from
  4288.                          a variety of sources:
  4289.  
  4290.                          Portions are copyright by Boreland International Inc.
  4291.                          Portions are copyright by GENUS Microprogramming Inc.
  4292.                          Portions are copyright by PKWARE Inc.
  4293.  
  4294.  
  4295.             --------------------------------------------------------------------
  4296.             ROTOR(tm)    Legal considerations: Trademarks                 C - 02
  4297.             --------------------------------------------------------------------
  4298.  
  4299.  
  4300.             trademark  : ROTOR(tm) is a trademark of Michel Robert.
  4301.  
  4302.  
  4303.             other
  4304.             trademarks : The names of the various software and hardware products
  4305.                          mentioned this manual are trademarks of their
  4306.                          respective owners.
  4307.  
  4308.  
  4309.             --------------------------------------------------------------------
  4310.             ROTOR(tm)    Legal considerations: Restrictions               C - 03
  4311.             --------------------------------------------------------------------
  4312.  
  4313.             this
  4314.             manual     : This manual, when supplied in printed form, may not be
  4315.                          reproduced, transmitted, transcribed, or stored in any
  4316.                          retrieval system, without express written permission
  4317.                          of the author.
  4318.  
  4319.             subject to
  4320.             change     : ROTOR(tm) and the information in this document are
  4321.                          subject to change without notice, and do not represent
  4322.                          a commitment on the part of the author.
  4323.  
  4324.             
  4325.             --------------------------------------------------------------------
  4326.             ROTOR(tm)    Legal considerations: License Agreement          C - 04
  4327.             --------------------------------------------------------------------
  4328.  
  4329.                          The author, Michel Robert, provides ROTOR(tm) and
  4330.                          licenses its use.  When you order a registered a copy
  4331.                          of ROTOR(tm), you become a licensed user, subject to
  4332.                          the following terms and conditions:
  4333.  
  4334.             usage      : You may use ROTOR(tm) on more than one computer
  4335.                          provided there is no chance it will be used
  4336.                          simultaneously by more than one person. You may not
  4337.                          install it on a network, or upload it to a remote
  4338.                          bulletin board system.
  4339.  
  4340.                          You may copy ROTOR(tm) files for backup purposes only.
  4341.  
  4342.                          You may not modify ROTOR(tm) or merge it into another
  4343.                          software package.  You may not rent it or lease it.
  4344.                          You may not give it, transfer it or resell it to
  4345.                          another party.
  4346.  
  4347.             title      : You are not obtaining title to the software, or any
  4348.                          copyright rights.  The author retains ownership of the
  4349.                          sofware, and all rights not expressly granted are
  4350.                          reserved.
  4351.  
  4352.             termination
  4353.                        : ROTOR(tm) and its documentation are protected by United
  4354.                          States Copyright Law and also by International Treaty
  4355.                          provisions.  Any use of the software in violation of
  4356.                          these laws constitutes termination of the license and
  4357.                          can be prosecuted.
  4358.  
  4359.             no
  4360.             warranties : ROTOR(TM) IS DISTRIBUTED AS IS.  THE AUTHOR DISCLAIMS
  4361.                          ALL WARRANTIES, EXPRESSED OR IMPLIED.
  4362.  
  4363.             no
  4364.             liability  : IN NO EVENT WILL THE AUTHOR BE LIABLE FOR ANY DAMAGES
  4365.                          ARISING FROM THE USE, MISUSE OR INABILITY TO USE THE
  4366.                          PROGRAM.  THE AUTHOR'S LIABILITY FOR ANY DAMAGES SHALL
  4367.                          NOT EXCEED THE FEE PAID FOR THE LICENSE TO USE THE
  4368.                          SOFTWARE.
  4369.  
  4370.             
  4371.             enforcement: This license agreement shall be construed and enforced
  4372.                          in accordance with the laws of the State of Georgia.
  4373.                          Any action arising out of or relating to this agreement
  4374.                          shall be brought only in a State or Federal court
  4375.                          located in Dekalb County, Georgia. The parties hereby
  4376.                          consent to in personam juridisdiction of said court.
  4377.  
  4378.             validity   : If any provision of this agreement is found void,
  4379.                          invalid, or unenforceable, it will not affect the
  4380.                          validity of the balance of this agreement.
  4381.  
  4382.             agreement  : USE OF ROTOR(TM) CONSTITUTES ACCEPTANCE OF THE TERMS OF
  4383.                          THIS LICENSE AGREEMENT.  IF YOU CANNOT AGREE WITH THE
  4384.                          TERMS OF THIS AGREEMENT, DO NOT REGISTER OR USE THE
  4385.                          SOFTWARE.
  4386.  
  4387.             
  4388.             --------------------------------------------------------------------
  4389.             ROTOR(tm)    Shareware version of ROTOR(tm)           Appendix D - 01
  4390.             --------------------------------------------------------------------
  4391.  
  4392.  
  4393.             shareware  : Shareware is a low-cost marketing method which allows
  4394.                          you to try a software package BEFORE you actually buy
  4395.                          it.
  4396.  
  4397.                          With shareware, everybody wins:  the author is spared
  4398.                          the high costs of advertising, and the user gets to
  4399.                          examine and test the software at his leisure.
  4400.  
  4401.                          When the user decides that a program suits him, he is
  4402.                          obliged to purchase the software by paying a reasonable
  4403.                          registration fee.
  4404.  
  4405.                          Shareware relies on the integrity of individuals. Most
  4406.                          people are quite happy to give the shareware authors
  4407.                          their due.  The recalcitrant ones are often won over by
  4408.                          bonus inducements.
  4409.  
  4410.             shareware
  4411.             version
  4412.             of ROTOR   : A special promotional version of ROTOR(tm) is
  4413.                          available for Shareware distribution.
  4414.  
  4415.                          This shareware version can be identified by its opening
  4416.                          'Welcome to ROTOR(tm) version 2.0S' screen, which
  4417.                          encourages the user to order a registered copy after
  4418.                          positive evaluation.
  4419.  
  4420.                          This is a fully functional copy of the program, which
  4421.                          includes a manual-on-disk, and a sample font, and a
  4422.                          sample clip-library.
  4423.  
  4424.                          It does NOT include any of the font and clip-art
  4425.                          utilities which are part of the registered package.
  4426.                          Also missing are the font and clip-art disks, and all
  4427.                          printed documentation.
  4428.  
  4429.                          The shareware version ROTOR(tm) may not be used freely
  4430.                          indefinitely.  The user is legally bound to order a
  4431.                          registered copy as soon as he decides to incorporate it
  4432.                          into his software library.  In other words, if you keep
  4433.                          it, on your hard disk, bookshelf, or elsewhere, you
  4434.                          must purchase a license to use it.  Otherwise, you
  4435.                          should destroy it, or pass it on to someone else.
  4436.  
  4437.             NOT public
  4438.             domain     : The shareware version of ROTOR(tm) is NOT public domain
  4439.                          or free software.  It may not be freely incorporated
  4440.                          into a book or software bundle without the express
  4441.                          written consent of the author.
  4442.  
  4443.             
  4444.             --------------------------------------------------------------------
  4445.             ROTOR(tm)    Mail-order distribution                 Appendix D - 02
  4446.             --------------------------------------------------------------------
  4447.  
  4448.                          There are numerous mail-order shareware distributors
  4449.                          out there.  Some are large companies who advertise
  4450.                          heavily and publish impressive glossy color catalogs.
  4451.                          Others are small businesses run by hobbyists. These
  4452.                          frequently publish their catalog on disk.
  4453.  
  4454.                          The following instructions apply to all mail-order
  4455.                          companies who wish to carry the SHAREWARE version of
  4456.                          ROTOR(tm), regardless of size.
  4457.  
  4458.             authorization
  4459.             to distribute
  4460.  
  4461.                        : Before including ROTOR(tm) any catalog or disk listing,
  4462.                          the distributor must request an AUTHORIZATION TO
  4463.                          DISTRIBUTE it, in writing, on company stationary.
  4464.  
  4465.             catalog
  4466.             copy       : A copy of the current catalog should be attached to the
  4467.                          request.
  4468.  
  4469.             advertising
  4470.             space      : Distributors who provide advertising space in their
  4471.                          catalog are advised to include rate and scheduling
  4472.                          information in their correspondance.  We are planning
  4473.                          to promote ROTOR(tm) aggressively, and are looking for
  4474.                          the appropriate channels to do so.
  4475.  
  4476.             distribution
  4477.             disk
  4478.                        : Generally, we only send out distribution disks when
  4479.                          releasing a program update.
  4480.  
  4481.                          In between releases, a distributor may obtain a copy of
  4482.                          the latest release by sending us a FORMATTED 3-1/2 disk
  4483.                          with SASE (self-addressed stamped enveloppe).
  4484.  
  4485.  
  4486.             write to   : ROTOR(tm) by Michel Robert
  4487.                          1732 Dunwoody Place,
  4488.                          Atlanta, GA 30324-2734, USA.
  4489.  
  4490.  
  4491.             
  4492.             distribution
  4493.             terms:
  4494.                          The authorization to distribute ROTOR(tm) is subject
  4495.                          to the following terms and conditions:
  4496.  
  4497.             1          : An explanation of the shareware concept must be
  4498.                          included in any publication or packaging that contains
  4499.                          our program.
  4500.  
  4501.             2          : The distributor agrees to discard older versions of the
  4502.                          program upon receipt of a new release.
  4503.  
  4504.             3          : The distributor agrees to promptly cease distributing
  4505.                          the program, if and when the author requests it.
  4506.  
  4507.             4          : The distributor agrees to disclose program distribution
  4508.                          data, to the author, upon written request.
  4509.  
  4510.                          Inclusion of ROTOR(tm) in a catalog represents implicit
  4511.                          agreement with the terms listed above.
  4512.  
  4513.  
  4514.             warning    : It is illegal to distribute the registered version of
  4515.                          ROTOR(tm).  Violators will be prosecuted to the full
  4516.                          extent of the law.
  4517.  
  4518.  
  4519.             
  4520.             --------------------------------------------------------------------
  4521.             ROTOR(tm)    BBS distribution                        Appendix D - 03
  4522.             --------------------------------------------------------------------
  4523.  
  4524.  
  4525.             BBS        : The term BBS is an abbreviation for 'Bulletin Board
  4526.                          System'.
  4527.  
  4528.                          Any BBS, wherever it may be, may post the shareware
  4529.                          version of ROTOR(tm) for downloading by its members.
  4530.                          It is not necessary to obtain a written authorization.
  4531.  
  4532.             BBS
  4533.             registration
  4534.  
  4535.                        : BBS operators who wish to enroll in our BBS-updating
  4536.                          program should register with us.   BBSs specializing
  4537.                          in graphics are particularly welcome.
  4538.  
  4539.                          Registered BBSs automatically receive new program
  4540.                          releases.  In exchange for this service, they agree to:
  4541.  
  4542.                          1 : Discard older versions of the program upon receipt
  4543.                              of a new release.
  4544.  
  4545.                          2 : Cease distributing the program, promptly, if and
  4546.                              when the author requests it.
  4547.  
  4548.                          3 : Disclose program download figures, to the author,
  4549.                              upon written request.
  4550.  
  4551.  
  4552.             ZIP file   : All ROTOR(tm) files should be compressed into a single
  4553.                          ROTORxx.ZIP file, where xx is the latest version
  4554.                          number.  The extension may differ, if another
  4555.                          compression standard is in use.
  4556.  
  4557.             courtesy
  4558.             membership:  The author, Michel Robert, would appreciate a courtesy
  4559.                          membership to your BBS.  If you chose to extend one,
  4560.                          please notify me in writing.  Many thanks.
  4561.  
  4562.             registered
  4563.             version
  4564.             uploads    : Should somebody upload a registered version (no welcome
  4565.                          screen) to your BBS, please jot down the serial number
  4566.                          and notify us promptly.
  4567.  
  4568.             prior
  4569.             versions  :  If your BBS currently holds a prior version of
  4570.                          ROTOR(tm) such as ROTOR09.ZIP,  we request that you
  4571.                          delete it.
  4572.  
  4573.                          If your system monitors files downloads, please tell us
  4574.                          how the prior version had been performing. Was it a
  4575.                          popular download?
  4576.  
  4577.             
  4578.             --------------------------------------------------------------------
  4579.             ROTOR(tm)    Suggested program description           Appendix D - 04
  4580.             --------------------------------------------------------------------
  4581.  
  4582.  
  4583.             one-line
  4584.             description:
  4585.  
  4586.                          Superb interactive animation graphics. A MUST SEE
  4587.  
  4588.  
  4589.             short list
  4590.             of features:
  4591.  
  4592.                          When space is available for a lengthy description, the
  4593.                          following features should be mentioned:
  4594.  
  4595.                          + user friendly menus.
  4596.                          + reads and writes PCX image files.
  4597.                          + supports GEM bitmapped fonts.
  4598.                          + supports New Printshop clip-art files.
  4599.                          + built-in script-interpreter.
  4600.                          + built-in library of 300+ patterns.
  4601.                          + many mouse-drawing-tools.
  4602.                          + numerous built-in shapes and symbols.
  4603.                          + reads and writes DEF shape-definition files.
  4604.                          + auto-tracing for clip-to-shape conversions.
  4605.                          + shape deformation options.
  4606.                          + clip and text output options.
  4607.                          + powerful motion engines.
  4608.                          + supports CGA, EGA, VGA ,SuperVGA, VESA, Hercules.
  4609.                          + printed output to laser-compatible devices.
  4610.  
  4611.             manual
  4612.             excerpts   : Excerpts from the program manual may be used to
  4613.                          describe and promote ROTOR(tm).  We recommend the
  4614.                          introductory chapter.  It discusses the purpose and
  4615.                          capabilities of the program at length.
  4616.  
  4617.             program
  4618.             requirements
  4619.                        : ROTOR(tm) requires:
  4620.  
  4621.                          + a graphic adapter.
  4622.                          + at least 425K of free memory.
  4623.                          + a pointing device (mouse or tablet) is recommended.
  4624.  
  4625.             
  4626.             --------------------------------------------------------------------
  4627.             ROTOR(tm)    DOS primer:   Overview                  Appendix E - 01
  4628.             --------------------------------------------------------------------
  4629.  
  4630.                          This section reviews the fundamental concepts of
  4631.                          DOS computing.  It is a rather rapid overview.
  4632.                          For complete details, please refer to your computer and
  4633.                          DOS manuals.
  4634.  
  4635.             your
  4636.             computer   : Since you have one, we're going to assume that you
  4637.                          are familiar with its physical features, such as
  4638.                          the location of the ON switch, its disk drive
  4639.                          openings, and its keyboard.
  4640.  
  4641.                          On a conceptual level, your computer is similar to
  4642.                          a concert hall.  It is a shell, an environment.
  4643.                          Just as an Opera House is brought to life by
  4644.                          concerts and artistic performances,  computers
  4645.                          are energized by software programs.  Without them,
  4646.                          they are nearly useless heaps of technology.
  4647.  
  4648.             your
  4649.             software   : A software program is a very elaborate list of
  4650.                          computer instructions which is designed to accomplish
  4651.                          some kind of task.
  4652.  
  4653.                          Software programs come in all shapes and sizes. Some
  4654.                          packages are easy to use, others are impossible to
  4655.                          figure out.
  4656.  
  4657.             your
  4658.             operating
  4659.             system     : This is actually a software program. Unfortunately, it
  4660.                          is not one the easy-to-use variety.  This is a
  4661.                          particularly deplorable situation, as the operating
  4662.                          system is the first program which every user
  4663.                          encounters.  It must be loaded into memory, before any
  4664.                          other program may be tried.  Unlike a bad game which
  4665.                          you can toss away, the operating system is neither
  4666.                          optional nor replaceable.  It cannot be ignored.
  4667.                          It must be dealt with, and it is therefore a good idea
  4668.                          to have have a good grasp of its capabilities.
  4669.  
  4670.                          Basically, it is a hardware manager.  Since most of the
  4671.                          hardware is dedicated to information storage and
  4672.                          retrieval, it is heavily loaded with disk and program
  4673.                          management tools:  It allows the user to examine the
  4674.                          contents of a floppy disk, or hard disk.  It enables
  4675.                          him/her  to copy, move, delete, rename and organize
  4676.                          programs.  It provides the hooks for add-on upgrade
  4677.                          equipment.  And it includes service functions for
  4678.                          keyboard and screen management.
  4679.  
  4680.             
  4681.             DOS        : The particular operating system we are concerned with
  4682.                          is, of course, DOS, which is an acronym for 'Disk
  4683.                          Operating System'.
  4684.  
  4685.                          There are many DOS flavors.  Microsoft makes MS-DOS.
  4686.                          IBM sells PC-DOS.  Digital Reasearch markets DR-DOS.
  4687.                          There is even a shareware DOS package called 4DOS.
  4688.                          And there are many versions.  Originally, new DOS
  4689.                          releases corresponded to advances in storage
  4690.                          technologies.  Today DOS upgrades have become a yearly
  4691.                          marketing ritual.
  4692.  
  4693.                          Although we have not tested ROTOR(tm) with every
  4694.                          DOS package, it should work fine with all of them.
  4695.  
  4696.             files      : One of the most important aspect of DOS is the way
  4697.                          it represents programs.  While other systems use
  4698.                          icons to do so, DOS is limited to 'files'.
  4699.  
  4700.                          Internally, a file is a collection of bytes.  Each byte
  4701.                          is an 8-digit set of 1s and 0s.  The actual meaning of
  4702.                          a byte depends on the context in which the byte is
  4703.                          used.  The sequence of bytes which makes-up the file
  4704.                          occupies space on some storage device, usually a
  4705.                          block of contiguous sectors.  But not always.  Large
  4706.                          files may be spread over several disjointed sectors.
  4707.  
  4708.             filenames  : As you can see, a file is not a particulary simple
  4709.                          thing.  It certainly isn't something you want to look
  4710.                          at as a bunch of 1s and 0s.  Some simpler vizualization
  4711.                          means is required.  The DOS method is FILENAMES, which
  4712.                          are essentially file 'labels'.  When you inspect the
  4713.                          contents of a disk, DOS shows you a list of filenames.
  4714.  
  4715.                          A typical filename consists of two parts, the filename
  4716.                          proper, and an extension.
  4717.  
  4718.                          Example:  MYPROG.WOW
  4719.                          The first part,  MYPROG, is the filename.  The second
  4720.                          part, .WOW, is the filename extension.
  4721.  
  4722.                          In general, filenames are selected for their
  4723.                          descriptive merits.  A good filename gives the user
  4724.                          a pretty solid clue to the file's origin, contents,
  4725.                          and purpose.  The extension part of a filename is
  4726.                          particularly informative, as it specifies how the
  4727.                          file is to be used.
  4728.             
  4729.             drive
  4730.             names      : Files are not immaterial entities.  They have a
  4731.                          physical presence.  They occupy measurable disk
  4732.                          space, somewhere.
  4733.  
  4734.                          The question is, where?  On a diskette?  On your
  4735.                          hard-drive?
  4736.  
  4737.                          This information can be given to DOS in the form of
  4738.                          a 'drive name', which consists of a letter followed
  4739.                          by a colon (:)
  4740.  
  4741.                          Examples:  A:
  4742.                                     C:
  4743.                                     G:
  4744.  
  4745.                          Usually, A: is the top disk-drive in your computer.
  4746.                          If you have two disk drives, the second one is B:
  4747.                          The internal hard-drive is usually the C: drive.
  4748.  
  4749.                          DOS Drives are not always physical devices.
  4750.                          For instance, memory can be configured to appear as a
  4751.                          drive.  Also a single hard drive may be split into
  4752.                          several 'virtual' (imaginary) drives.
  4753.  
  4754.  
  4755.             directories
  4756.  
  4757.                        : A single drive may be subdivided into separate labelled
  4758.                          sections called directories.  These directories can
  4759.                          themselves be partioned further.  A hierarchical
  4760.                          tree-like structure of directories can be built,
  4761.                          similar to a table-of-contents.
  4762.  
  4763.                          This is a useful feature, as it allows us to organize
  4764.                          a large number of files into smaller groups of related
  4765.                          files.
  4766.  
  4767.                          A directory label is a short word, with at most 8
  4768.                          characters.  Example:  UTILITY
  4769.  
  4770.  
  4771.             path       : Unfortunately, directories complicate the task of
  4772.                          locating a file.  When a file is buried in a
  4773.                          directory, it is not sufficient to tell DOS on which
  4774.                          drive it can be found. It is also necessary to specify
  4775.                          the directory where it is located.  A complete 'path'
  4776.                          expression is required.  The following is a simple
  4777.                          example:
  4778.  
  4779.                           A:\GAME\GRAPHICS\MYPROG.WOW
  4780.  
  4781.                          The path expression above tells us that the file
  4782.                          MYPROG.WOW can be found on drive A:, in the GRAPHICS
  4783.                          sub-directory of the GAME directory.  Backslash
  4784.                          characters are used to separate the various components
  4785.                          of the path, and no spaces are allowed in the
  4786.                          expression.
  4787.             
  4788.             program
  4789.             organization
  4790.  
  4791.                        : A software program may consist of single file, or
  4792.                          it may require several.  When there are several files,
  4793.                          these may all be gathered in a single location, or they
  4794.                          may be spread over several directories.  There is no
  4795.                          standard configuration which all programs follow.
  4796.  
  4797.             program
  4798.             files      : The files that constitute a program can be divided into
  4799.                          three separate categories:
  4800.                          + The executable file, which sports a .COM or .EXE
  4801.                            extension.
  4802.                          + Code files, which extend the main executable.
  4803.                          + Data files, which usually contain saved information.
  4804.  
  4805.                          The executable and code files are mandatory for
  4806.                          correct program operation.
  4807.  
  4808.                          The data files are usually optional, and sometimes they
  4809.                          can be shared by several programs.
  4810.  
  4811.             program
  4812.             execution  : To use a program, simply type the executable's filename of the
  4813.                          at the DOS prompt, and then press ENTER.
  4814.  
  4815.                          Example :  To run CHKDSK.COM,  type CHKDSK <enter>
  4816.                                     (Note that it is not necessary to type the
  4817.                                     file extension)
  4818.  
  4819.                          Only .COM, .EXE and .BAT files can be 'executed' in
  4820.                          this fashion.  (.BAT files are 'batch' files which
  4821.                          consist of a list of DOS commands).
  4822.  
  4823.  
  4824.             the DOS
  4825.             program    : DOS itself is a program.  When you purchase DOS, you
  4826.                          get a boxful of manuals and disks.  It is easy to get
  4827.                          the impression that DOS is a large program counting
  4828.                          numerous support files.   The truth, however, is that
  4829.                          DOS is a tiny program, consisting of only 3 files:
  4830.  
  4831.                               COMMAND.COM
  4832.                               IO.SYS        -- sometimes called IBMBIO.COM  --
  4833.                               MSDOS.SYS     -- sometimes called IBMDOS.COM  --
  4834.  
  4835.                          The remaining files are small utility programs, most of
  4836.                          which are unfriendly and unfathomable.  Many of these
  4837.                          are completely unnecessary to the operation of DOS
  4838.                          itself, and so it is perfectly OK to ignore them, at
  4839.                          least initially.
  4840.  
  4841.                          The small size of DOS itself is not a bad thing. Quite
  4842.                          to the contrary.  It is one of its assets.  DOS does
  4843.                          not devour disk and memory space.
  4844.  
  4845.  
  4846.             
  4847.             --------------------------------------------------------------------
  4848.             ROTOR(tm)    DOS primer:  Dealing with the prompt    Appendix E - 02
  4849.             --------------------------------------------------------------------
  4850.  
  4851.             running
  4852.             DOS        : When you start-up your computer, it automatically loads
  4853.                          the three DOS files mentioned above into memory. DOS
  4854.                          then displays its copyright and version-identification
  4855.                          message, and then prompts the user for input, via a
  4856.                          blinking cursor:
  4857.  
  4858.                          C>_
  4859.  
  4860.                          This is the DOS `prompt'.  It is quite disconcerting
  4861.                          to newcomers,  as it gives the user no indication of
  4862.                          how he/she should proceed.
  4863.  
  4864.             when lost
  4865.             at the
  4866.             prompt     : When you find yourself alone, face-to-face with the
  4867.                          unsavory DOS prompt, the best thing to do is to issue a
  4868.                          DIR command:
  4869.  
  4870.                          C>DIR <and press enter>
  4871.  
  4872.                          This causes DOS to spew out a list of files and/or
  4873.                          directories, somewhat like this:
  4874.  
  4875.                          ASSIGN   COM     1530   7-24-87  12:00a
  4876.                          AUTOEXEC BAT      128   6-22-93   2:52a
  4877.                          BILL     TXT      836   9-05-91  12:39a
  4878.                          BUDGET   TXT     9811   9-05-91  12:39a
  4879.                          CHKDSK   COM     6402   7-24-87  12:00a
  4880.                          COMMAND  COM    25276   3-17-92   9:11p
  4881.                          CONFIG   SYS      146   9-25-90   4:22p
  4882.                          FORMAT   COM    11671   7-24-87  12:00a
  4883.                          IO       SYS    22357   7-24-87  12:00a
  4884.                          MENU             4278   1-24-93   6:36a
  4885.                          MSDOS    SYS    30128   7-24-87  12:00a
  4886.                          XCOPY    EXE     6556   2-09-88  12:00a
  4887.  
  4888.                          The listing includes interesting statistics, such as
  4889.                          each file's size, in bytes, and the date/time of its
  4890.                          creation.
  4891.  
  4892.                          Most importantly, it shows us several executable files.
  4893.                          These sport .COM or .EXE extensions.  Why do we care
  4894.                          about them?  Because they are programs!  We can run
  4895.                          them, by simply typing the filename, and <enter>.
  4896.  
  4897.                          Blindly starting a program discovered in this manner is
  4898.                          not as foolish and dangerous as it might seem.  On the
  4899.                          contrary, it is the quickest way to find out what the
  4900.                          program is designed to do.  This is due to the fact
  4901.                          that most programs begin with some sort of title screen
  4902.                          which spells out its purpose, and may even contain help
  4903.                          instructions.
  4904.  
  4905.             
  4906.             --------------------------------------------------------------------
  4907.             ROTOR(tm)    DOS primer:  Current drive:/directory   Appendix E - 03
  4908.             --------------------------------------------------------------------
  4909.  
  4910.             default
  4911.             drive      : Most computers feature several disk drives.  DOS does
  4912.                          not watch them all simultaneously.  It can only work
  4913.                          with one drive at-a-time.  As a result, at any moment
  4914.                          in time, one particular drive is under DOS observation,
  4915.                          while all the others are being ignored.
  4916.  
  4917.                          The drive getting all the attention is called 'the
  4918.                          default drive' or 'current drive'.  DOS lets you know
  4919.                          which drive this is, by naming it in its cryptic
  4920.                          prompt:
  4921.  
  4922.                          C>
  4923.                          |
  4924.                          +---- this is the current drive.
  4925.  
  4926.                          The user can easily change the current drive, by simply
  4927.                          typing-in the name of another existing drive.  For
  4928.                          example, to make A: the current drive, one simply
  4929.                          types at the DOS prompt:
  4930.  
  4931.                          C>A: <enter>                 -- C> is the DOS prompt --
  4932.  
  4933.                          The DOS prompt then becomes:
  4934.  
  4935.                          A>
  4936.  
  4937.                          You are probably wondering what is so important about
  4938.                          the 'current drive'.  The answer is that when DOS
  4939.                          performs disk and file management tasks, it only looks
  4940.                          at the current drive, unless specifically requested to
  4941.                          do otherwise.  In the case of a DIR command, only the
  4942.                          current-drive files are displayed on the screen.  The
  4943.                          contents of other drives are not shown.  The following
  4944.                          DIR commands produce drastically different listings:
  4945.  
  4946.                          C>DIR <enter>     --  displays the files on drive C --
  4947.                          A>DIR <enter>     --  displays the files on drive A --
  4948.  
  4949.             working
  4950.             directory  : DOS does not handle several directories simultaneously
  4951.                          either.  As with drives, it only works with one
  4952.                          directory at a time.  This special fellow is called the
  4953.                          'current working directory' or 'default directory'.
  4954.  
  4955.                          By default, DOS prompt does not automatically include a
  4956.                          default directory indication.  Fortunately, the prompt
  4957.                          can be configured to include it.  This is done by
  4958.                          typing at the command line:
  4959.  
  4960.                          C>PROMPT $P $G <enter>
  4961.  
  4962.                          Supposing the path to current directory is  C:\UTILITY,
  4963.                          the DOS prompt then becomes:
  4964.  
  4965.                          C:\UTILITY>
  4966.  
  4967.                          A DIR command issued at this prompt would only list
  4968.                          the files located in C:\UTILITY.
  4969.  
  4970.  
  4971.             the
  4972.             current
  4973.             path       : Literally, this is the path leading to the current
  4974.                          working directory.  Conceptually, it is an electronic
  4975.                          'you are here' arrow.
  4976.  
  4977.             
  4978.             --------------------------------------------------------------------
  4979.             ROTOR(tm)    DOS primer:  Working with directories   Appendix E - 04
  4980.             --------------------------------------------------------------------
  4981.  
  4982.             the DOS
  4983.             directory
  4984.             commands   : DOS provides four directory management commands:
  4985.  
  4986.                          + MD,  to Make a Directory.
  4987.                          + CD,  to Change the working Directory.
  4988.                          + RD,  to Remove a Directory.
  4989.                          + DIR, for DIRectory listings.
  4990.  
  4991.                          These commands are internal to DOS. They are not
  4992.                          separate programs.
  4993.  
  4994.  
  4995.  
  4996.             to make a
  4997.             directory  : To create a sub-directory in the current working
  4998.                          directory, simply enter:
  4999.  
  5000.                             MD <new-directory-name>
  5001.  
  5002.                          To create a directory somewhere else:
  5003.  
  5004.                             MD <path-to-new-directory> <new-directory-name>
  5005.  
  5006.                          To illustrate how this command works, we construct
  5007.                          the following `directory-tree' on drive C:
  5008.  
  5009.                              (root)
  5010.                                |
  5011.                           +----+----+---------+
  5012.                           |         |         |
  5013.                          DOS     utility     paint
  5014.                                               |
  5015.                                           +---+---+
  5016.                                           |       |
  5017.                                         fonts     clips
  5018.  
  5019.  
  5020.                          The commands are:
  5021.  
  5022.                          A:\>C:              -- log onto C: drive --
  5023.                          C:\>MD DOS          -- create the DOS directory --
  5024.                          C:\>MD utility      -- create the utility directory --
  5025.                          C:\>MD PAINT        -- create the PAINT directory --
  5026.                          C:\>MD PAINT        -- create the DOS directory --
  5027.                          C:\>MD PAINT\fonts  -- create the fonts directory --
  5028.                          C:\>MD PAINT\CLIPS  -- create the CLIPS directory --
  5029.  
  5030.             the root
  5031.             directory  : This directory represents the disk itself. It is
  5032.                          automatically created by the disk-formatting process.
  5033.  
  5034.                          We call it the 'root' directory, but as far as DOS is
  5035.                          concerned, it has no name at all.  In path expressions,
  5036.                          it appears as a lone '\'.
  5037.  
  5038.                          Example:   C:\>
  5039.  
  5040.             
  5041.             to change
  5042.             the working
  5043.             directory  :
  5044.                          To move to an immediate sub-directory of the current
  5045.                          directory, enter:
  5046.  
  5047.                             CD <sub-directory-name>
  5048.  
  5049.                          To move up to the immediate 'parent' of the current
  5050.                          directory, the following shortcut is available:
  5051.  
  5052.                             CD..                       -- CD + 2 periods   --
  5053.  
  5054.                          To jump all the way up to the ROOT directory, simply
  5055.                          type:
  5056.  
  5057.                             CD \                       -- \ = path to root --
  5058.  
  5059.                          The general form of the CD command allows us to
  5060.                          change to any directory:
  5061.  
  5062.                             CD <path-to-desired-directory> <directory-name>
  5063.  
  5064.  
  5065.                          To illustrate how this command works, let us travel
  5066.                          up and down the 'directory-tree' which we just built:
  5067.  
  5068.                              (root)
  5069.                                |
  5070.                           +----+----+---------+
  5071.                           |         |         |
  5072.                          DOS     utility     paint
  5073.                                               |
  5074.                                           +---+---+
  5075.                                           |       |
  5076.                                         fonts     clips
  5077.  
  5078.  
  5079.                          C:\>                -- we begin at the root --
  5080.                          C:\>cd dos          -- lets go to the DOS directory --
  5081.                          C:\DOS>             -- we're in the DOS directory --
  5082.                          C:\DOS>cd \         -- lets go back to root --
  5083.                          C:\>                -- we're back at the root! --
  5084.                          C:\>cd paint\fonts  -- lets go to the FONTS dir. --
  5085.                          C:\PAINT\FONTS>     -- we're there! --
  5086.                          C:\PAINT\FONTS>cd.. -- lets go to parent directory --
  5087.                          C:\PAINT>           -- PAINT is the parent of FONTS! --
  5088.                          C:\PAINT>cd..       -- keep on climbing the tree.. --
  5089.                          C:\>                -- we're back at the root! --
  5090.                            |
  5091.                            +---------------- The prompt is updated by DOS as
  5092.                                              the working directory is changed.
  5093.                                              
  5094.  
  5095.  
  5096.                          Please note that the CD command can be used to display
  5097.                          the name of the current directory.  To do so, simply
  5098.                          type CD and press <enter>.
  5099.  
  5100.  
  5101.  
  5102.             
  5103.             to remove a
  5104.             directory  : A directory cannot be deleted if it contains any
  5105.                          files or sub-directories.  So before you use this
  5106.                          command, make sure that the target directory is
  5107.                          empty.
  5108.  
  5109.                          To delete an immediate subdirectory, type:
  5110.  
  5111.                             RD <directory-name>
  5112.  
  5113.                          The full syntax of the RD command is:
  5114.  
  5115.                             RD [drive:] <path>
  5116.  
  5117.  
  5118.                          To illustrate, let us destroy the 'directory tree'
  5119.                          we just created:
  5120.  
  5121.  
  5122.                              (root)
  5123.                                |
  5124.                           +----+----+---------+
  5125.                           |         |         |
  5126.                          DOS     utility     paint
  5127.                                               |
  5128.                                           +---+---+
  5129.                                           |       |
  5130.                                         fonts     clips
  5131.  
  5132.                          C:\>                -- we are at the root --
  5133.                          C:\>rd dos          -- destroy the DOS directory --
  5134.                          C:\>rd utility      -- destroy the UTILITY directory --
  5135.                          C:\>rd paint     <<<<< We cannot do this, as PAINT is
  5136.                                                 NOT an empty directory!!!!
  5137.                          C:\>rd paint\fonts  -- destroy FONTS --
  5138.                          C:\>rd paint\clips  -- destroy CLIPS --
  5139.                          C:\>rd paint        -- Now we can remove PAINT --
  5140.                          C:>                 -- All done, no directries left! --
  5141.  
  5142.  
  5143.             
  5144.             to list the
  5145.             contents of
  5146.             a directory
  5147.  
  5148.                        : The DIR command produces a directory listing which
  5149.                          includes not only files, but also sub-directory
  5150.                          names.
  5151.  
  5152.                          To display the contents of the current directory, type:
  5153.  
  5154.                              DIR <enter>
  5155.  
  5156.                          To display the contents of a remote directory, add the
  5157.                          necessary path information.  Example:
  5158.  
  5159.                              DIR C:\paint
  5160.  
  5161.  
  5162.             example    : The following example is based on the directory
  5163.                          tree previously built:
  5164.  
  5165.                          C:\>DIR C:\paint
  5166.  
  5167.                          Volume in drive C has no label
  5168.                          Directory of  C:\paint
  5169.                          .            <DIR>      6-12-93  12:33a
  5170.                          ..           <DIR>      6-12-93  12:33a
  5171.                          INSTALL  EXE    39531   2-13-89   2:59p
  5172.                          PAINT    EXE   235562   2-15-89   4:39p
  5173.                          FONTS        <DIR>      6-24-93   2:12p
  5174.                          CLIPS        <DIR>      6-24-93   2:13p
  5175.                          6 File(s)     2314336 bytes free
  5176.  
  5177.                          The listing above deserves some close scrutiny:
  5178.  
  5179.                          Most of the entries are directories, as indicated by
  5180.                          their '<DIR>' label.  The '6 File(s)' message at the
  5181.                          bottom of the listing is misleading, as in reality,
  5182.                          there are only 2 files.  It should really read '6
  5183.                          entries'.
  5184.  
  5185.                          The first entry is a single dot (.). It represents
  5186.                          the current directory, which in this example is
  5187.                          C:\paint
  5188.  
  5189.                          The second entry is a double dot (..). It represents
  5190.                          the PARENT of the current directory,  which in this
  5191.                          case, is the root directory, C:/
  5192.  
  5193.                          The listing shows the date/time of creation for every
  5194.                          entry.  With files, their size is also shown.
  5195.  
  5196.                          The '2314336 bytes free' message tells you how much
  5197.                          free disk space remains available.  This  space is
  5198.                          available, but it is NOT RESERVED for the directory.
  5199.             
  5200.             DIR
  5201.             options   :  When the entries of a directory are too numerous to fit
  5202.                          in a single screen, they often end-up scrolled out-of
  5203.                          sight.  To avoid this problem, we recommend adding the
  5204.                          /p option, which causes DIR to paginate its output.
  5205.  
  5206.                              example: DIR /p
  5207.                              example: DIR C:\paint\fonts /p
  5208.  
  5209.                          The listings produced by DIR normally include space
  5210.                          wasting statistics such as file size and date/time of
  5211.                          creation.  For a more compact listing format, stripped
  5212.                          of such data, use the /w option.  It causes DIR to list
  5213.                          5 directory entries on each line of text.  (W='wide')
  5214.  
  5215.                              example: DIR /w
  5216.                              example: DIR C:\paint\fonts /w
  5217.  
  5218.                          The /p and /w  options are not mutually exclusive.
  5219.                          Simultaneous use is perfectly acceptable, and the
  5220.                          order of inclusion is not important.
  5221.  
  5222.                              example: DIR /w /p
  5223.                              example: DIR C:\paint\fonts /p /w
  5224.  
  5225.             summary    : To summarize, the full syntax of the DIR command is:
  5226.  
  5227.                              DIR [drive:][pathname][\p][\w]
  5228.  
  5229.                          (square brackets indicate optional items)
  5230.             
  5231.             the
  5232.             current
  5233.             working
  5234.             directory  : In a preceeding section, we stated that DOS focuses
  5235.                          on a single directory at a time, the 'CURRENT WORKING
  5236.                          DIRECTORY'.  This statement  is somewhat misleading,
  5237.                          in that it gives the impression that there can only
  5238.                          be one working-directory.
  5239.  
  5240.                          DOS actually keeps track of several working
  5241.                          directories, ONE FOR EACH DRIVE IN EXISTENCE.
  5242.  
  5243.                          The working-directory for the current drive is
  5244.                          the 'current working-directory'.  The other
  5245.                          working-directories are NOT current.
  5246.  
  5247.                          Sound confusing?  The following example may help
  5248.                          clarify:
  5249.  
  5250.                          Lets assume that we are working on a machine with
  5251.                          two drives, A: and C:, which are organized as follows:
  5252.  
  5253.                                   C:                     A:
  5254.                                 (root)                 (root)
  5255.                                   |                      |
  5256.                              +----+----+             +---+---+
  5257.                              |         |             |       |
  5258.                             DOS     utility        fonts     clips
  5259.  
  5260.                          We log onto drive C:, and go to the UTILITY directory:
  5261.                          A:\>C:              -- log onto drive C --
  5262.                          C:\>                -- user now logged on drive C --
  5263.                          C:\>CD utility      -- move to UTILITY directory --
  5264.                          C:\UTILITY>         -- we're now in UTILITY  --
  5265.  
  5266.                          Then we switch to drive A:, and jump to FONTS:
  5267.                          C:\utility>A:       -- switch to drive A --
  5268.                          A:\>                -- user now logged on drive A --
  5269.                          A:\>CD fonts        -- move to FONTS directory --
  5270.                          A:\FONTS>           -- we're now in FONTS --
  5271.  
  5272.                          At that point,
  5273.  
  5274.                             FONTS    is the working directory for drive A:
  5275.                             UTILITY  is the working directory for drive C:
  5276.                             A:\FONTS is the CURRENT working directory.
  5277.  
  5278.  
  5279.             
  5280.             changing
  5281.             drives
  5282.             revisited  : If is worth noting that when changing drives, DOS
  5283.                          automatically switches to the corresponding
  5284.                          working directory.
  5285.  
  5286.                          In the example above, where
  5287.  
  5288.                          FONTS    is the working directory for drive A:
  5289.                          UTILITY  is the working directory for drive C:
  5290.  
  5291.                          a switch from drive A: back to C: automatically
  5292.                          changes the working directory from FONTS to UTILITY:
  5293.  
  5294.                          A:\FONTS>           -- we are logged onto A --
  5295.                          A:\FONTS>C:         -- switch to drive C --
  5296.                          C:\utility>         -- we are now logged onto C --
  5297.                          |    |
  5298.                          |    +--------- changed working directory.
  5299.                          +-------------- changed drive.
  5300.  
  5301.  
  5302.  
  5303.  
  5304.             
  5305.             --------------------------------------------------------------------
  5306.             ROTOR(tm)    DOS primer:  Working with files         Appendix E - 05
  5307.             --------------------------------------------------------------------
  5308.  
  5309.             the DOS
  5310.             file
  5311.             commands   : DOS provides four important file management
  5312.                          commands:
  5313.  
  5314.                          + COPY, to copy one or several files.
  5315.                          + REN,  to change the name of a file. (to rename it)
  5316.                          + DEL,  to delete a file.
  5317.                          + TYPE, to display the contents of a files.
  5318.  
  5319.                          All of the commands listed above are internal to DOS.
  5320.                          They are not separate programs.  They do not appear in
  5321.                          any DIR-generated listing.
  5322.  
  5323.  
  5324.             COPY       : The COPY command creates file copies.  It is used to
  5325.                          copy files from one drive to another, or from one
  5326.                          directory to another, or both.  It is also capable of
  5327.                          more esoteric operations, such as file concatenations.
  5328.                          The basic format of a COPY command is:
  5329.  
  5330.                          COPY <what> <where-to>
  5331.  
  5332.                          <what>  is the name of the file to be copied.
  5333.                          <where> is the target destination.
  5334.  
  5335.                          example:  A:\> COPY  COMMAND.COM          B:
  5336.                                                   |                |
  5337.                                                 <what>         <where-to>
  5338.  
  5339.                          When the target destination matches the current
  5340.                          directory, <where-to> can be omitted.
  5341.  
  5342.                          Example:  C:\>COPY  A:COMMAND.COM
  5343.                          The command above copies COMMAND.COM from A:\ to  C:\
  5344.  
  5345.                          When the target destination is NOT the current working
  5346.                          directory, its path must be included in <where-to>.
  5347.                          example:  C:\> COPY  CHKDSK.COM  C:\UTILITY
  5348.  
  5349.                          When the source file is not located in the current
  5350.                          working directory, its path must be specified:
  5351.                          example:  C:\> COPY  C:\PAINT\INSTALL.EXE   A:
  5352.  
  5353.  
  5354.             warning    : The COPY command does not forbid OVERWRITING.
  5355.                          When the file being copied already exists in the
  5356.                          target destination, overwriting occurs: the source
  5357.                          file replaces its match on the destination directory.
  5358.  
  5359.                          However, a file may not be copied onto itself.  The
  5360.                          following command is illegal:
  5361.                                    COPY INSTALL.EXE  INSTALL.EXE
  5362.  
  5363.             
  5364.             REN        : This command is used to change the name of a file.
  5365.                          The basic format of a REN command is:
  5366.  
  5367.                          REN  <this file>  <new filename>
  5368.                          example: REN BUDGET.TXT  MYBUDGET.DOC
  5369.  
  5370.  
  5371.             DEL        : This command is used to delete files(s).
  5372.                          The basic format of a DEL command is:
  5373.  
  5374.                          DEL  <what file>
  5375.                          example: DEL BUDGET.BAK
  5376.  
  5377.  
  5378.             TYPE       : This commands can be used to display the contents of a
  5379.                          text file.  The basic format of a TYPE command is:
  5380.  
  5381.                          TYPE <what file>
  5382.                          example: TYPE AUTOEXEC.BAT
  5383.  
  5384.                          When the input file is NOT a text file, strange
  5385.                          characters may appear on the screen.  Do not panic,
  5386.                          this is not a disaster!  Wait it out, then enter CLS
  5387.                          to 'clean-up' the screen.
  5388.  
  5389.                          When the input file is very long, use the MORE filter
  5390.                          program to paginate the output:
  5391.                          example: TYPE AUTOEXEC.BAT | MORE.
  5392.                          Alternatively, you may use repeated CTRL-S keypresses
  5393.                          to toggle scrolling ON/OFF.
  5394.  
  5395.             
  5396.             wild cards : So far, all of our examples show a single file being
  5397.                          manipulated.  Multiple file operations are also
  5398.                          possible, thanks to special characters called
  5399.                          'wild cards'.
  5400.  
  5401.                          There are two wild card characters: '*' and '?'.  These
  5402.                          are used within a filename string to generate a
  5403.                          file-specification which describes a whole group of
  5404.                          files.
  5405.  
  5406.                          The '*' wild card means 'all'.  The following examples
  5407.                          illustrate its usage:
  5408.  
  5409.                          *.*              -- all files --
  5410.                          *.EXE            -- all EXE files --
  5411.                          *.DEF            -- all DEF files --
  5412.                          SHAPE.*          -- all files named SHAPE, regardless
  5413.                                              of the extension.  --
  5414.                          REPORT*.TXT      -- all files beginning with REPORT
  5415.                                               and ending with .TXT --
  5416.  
  5417.                          The '?' wild card is a place-holder indicating 'any
  5418.                          legal character':
  5419.  
  5420.                          HELP??           -- all HELP files with a 2-character
  5421.                                              suffix.  The following would be
  5422.                                              included: HELP01, HELP02, HELPAB,..
  5423.  
  5424.                          ???.X            -- all files with 3-letter names and
  5425.                                              an .X extension --
  5426.  
  5427.                          Both wild-card characters may be used together in a
  5428.                          single filename expression:
  5429.  
  5430.                          *.PC?           -- all files with a 3-letter extension
  5431.                                             beginning with PC.  The following
  5432.                                             would be included: FOO.PCX, BAR.PCC
  5433.  
  5434.                          ????*.*         -- All 4-letter or longer filenames,
  5435.                                             regarless of the extension
  5436.                                             (no extension is also OK) --
  5437.  
  5438.             common
  5439.             usage of
  5440.             wildcards  : COPY A:*.* B:   -- Copy all files in drive A: to B: --
  5441.                          DEL  *.BAK      -- Delete all BAK files --
  5442.                          DIR *.          -- list all files with no extension --
  5443.                                          -- this would include any directories.
  5444.                          REN *.TXT *.DOC -- change the extension of TXT files
  5445.                                             to DOC --
  5446.  
  5447.                          When executing the sample commands show above, DOS does
  5448.                          not look accross directories.  For instance, the
  5449.                          command DEL *.BAK only deletes the BAK files found in
  5450.                          the current working directory.  BAK files located
  5451.                          elsewhere remain intact.
  5452.  
  5453.             
  5454.             --------------------------------------------------------------------
  5455.             ROTOR(tm)    DOS primer:   Disk commands             Appendix E - 06
  5456.             --------------------------------------------------------------------
  5457.  
  5458.                          In the preceeding section, we have reviewed the
  5459.                          DOS commands for directory and file manipulation.
  5460.                          Here, we look at its DISK manipulation tools:
  5461.  
  5462.                          FORMAT, LABEL, VOL, DISKCOPY, XCOPY, AND CHKDSK.
  5463.  
  5464.                          With the exception of VOL, all the disk commands
  5465.                          are separate utility programs, external to DOS.
  5466.  
  5467.             blank
  5468.             disks      : One of the most puzzling and ridiculous aspects of
  5469.                          PC computing is the fact that blank diskettes are not
  5470.                          immediately usable, the way cassette tapes are.
  5471.                          You cannot simply insert a disk in a drive and
  5472.                          begin copying files to it.  Blank disks must first
  5473.                          be prepared for usage, by an operation called
  5474.                          FORMATTING.
  5475.  
  5476.  
  5477.             FORMAT     : The DOS FORMAT utility program prepares blank-disks
  5478.                          for usage.
  5479.  
  5480.                          You may wonder what it is that the FORMAT command does
  5481.                          to a disk to make it usable.  The answer is rather
  5482.                          technical:  it builds a FAT (file allocation table).
  5483.                          This FAT is a ledger which is used by DOS to record the
  5484.                          location of saved files.  This FAT is extremely
  5485.                          important.  When damaged, the contents of the disk
  5486.                          become undecipherable.
  5487.  
  5488.                          The formatting process also creates the disk's root
  5489.                          directory.
  5490.  
  5491.                          The simplest way to use FORMAT is as follows:
  5492.                          Usage   : FORMAT <drive>
  5493.                          Example : FORMAT A:
  5494.  
  5495.                          This simple usage rule requires matching disk and drive
  5496.                          specifications.  The capacity of disk to be formatted
  5497.                          must match that of the formatting drive.  For instance,
  5498.                          in the case of a 1.44 drive,  the inserted disk should
  5499.                          be a 1.44 diskette.
  5500.  
  5501.                          It is possible to format a 720K disk in a 1.44 drive,
  5502.                          or a 360K floppy in a 1.2Meg drive, but doing so
  5503.                          usually requires complex formatting arguments which
  5504.                          are beyond the scope of this introduction to DOS.
  5505.  
  5506.                          It is important to note that FORMAT is a DESTRUCTIVE
  5507.                          command.  When it is applied to a working disk,
  5508.                          the contents of that disk are destroyed and lost.
  5509.                          So be careful!
  5510.  
  5511.             
  5512.             pre-
  5513.             formatted
  5514.             disks      : These are blank disks which have been formatted by the
  5515.                          disk-manufacturer for use in DOS machines. They are
  5516.                          'ready-to-use'.  They do not require preparation by
  5517.                          FORMAT.  We are great fans of these disks, as they
  5518.                          are great time savers.  Unfortunately, they cost
  5519.                          more than the regular plain-vanilla disks.
  5520.  
  5521.                          When you buy these, make sure you are getting 'IBM'
  5522.                          disks.
  5523.  
  5524.             volume
  5525.             labels     : Every disk can be given an identifying name called
  5526.                          a 'volume label'.   DOS displays this name when
  5527.                          listing the contents of a directory (DIR).
  5528.  
  5529.                          The FORMAT command prompts the user for such a name.
  5530.                          When this happens, simply enter a descriptive
  5531.                          word (11 charaters or less).  Alternatively, you may
  5532.                          just press <enter> right away, for no volume label.
  5533.  
  5534.  
  5535.  
  5536.             LABEL      : The LABEL command allows us to create , modify or
  5537.                          delete a disk's volume label.
  5538.  
  5539.                          Usage   : LABEL [drive] [label]
  5540.                          Example : LABEL A: rotor20
  5541.                          This command labels the disk in drive A: 'ROTOR20'.
  5542.  
  5543.                          The label provided by the user may not exceed 11
  5544.                          characters in length.
  5545.  
  5546.  
  5547.  
  5548.             VOL        : Use this command to look-up a disk's volume label.
  5549.  
  5550.                          Usage   : VOL [drive]
  5551.                          Example : VOL A:
  5552.                                    DOS responds with a message:
  5553.                                    'Volume in drive A: is ROTOR20'
  5554.  
  5555.             
  5556.             DISKCOPY   : This command is used to copy the contents of one
  5557.                          diskette onto another.  The copying process includes
  5558.                          formatting of the target diskette, if necessary.
  5559.  
  5560.                          Usage   : DISKCOPY [source-drive] [target-drive]
  5561.                          Example : DISKCOPY A: B:
  5562.                                    This command copies all the files in drive
  5563.                                    A: to the disk in drive B:
  5564.  
  5565.                          Disk copying is possible on single drive machines.
  5566.                          To do so, simply provide matching source and target
  5567.                          specifications, and follow the disk-switching
  5568.                          directions that DISKCOPY provides.
  5569.                          example : DISKCOPY  A: A:
  5570.  
  5571.                          The DISKCOPY command is a quick and convenient command.
  5572.                          It is faster than a FORMAT command followed by a COPY
  5573.                          *.* command.
  5574.  
  5575.  
  5576.             XCOPY      : XCOPY is a file-copying program.  If is similar to
  5577.                          COPY, but faster, and smarter.
  5578.  
  5579.                          Usage    : XCOPY <what> <where-to>
  5580.                          Example  : XCOPY  A:*.*  B:
  5581.                                     This command copies all the files in the
  5582.                                     working directory of drive A: to the
  5583.                                     working directory of drive B:
  5584.  
  5585.                          When COPY is used to transfer multiple files, it
  5586.                          proceeds one file at time.  First it reads a file, then
  5587.                          it writes it,  then it proceeds onto the next file.
  5588.                          This is not an efficient methodology, as the disk
  5589.                          drives involved are constantly starting, stopping and
  5590.                          starting again.  Many precious seconds are lost simply
  5591.                          getting the drives back-up to `reading' speed.
  5592.  
  5593.                          XCOPY uses a better approach.  It reads as many files
  5594.                          as possible into memory before proceeding to the
  5595.                          `writing' phase.  This is a much faster process,
  5596.                          particularly when copying files to a diskette.
  5597.  
  5598.                          Another benefit of the XCOPY program is its ability
  5599.                          to copy the entire contents of a directory, including
  5600.                          its sub-directories and their contents.  But this is
  5601.                          not automatic.  The user must request this service
  5602.                          by including the option  /s /e  after the <where-to>
  5603.                          argument:
  5604.  
  5605.                          Example  : XCOPY  C\:*.*  D: /s /e
  5606.                                     This command duplicates the entire directory
  5607.                                     structure of drive C: onto drive D:,
  5608.                                     including all the files.
  5609.  
  5610.             
  5611.             CHKDSK     : This is a disk diagnostics program.  Its primary job is
  5612.                          to detect corrupted or damaged disk sectors, and to
  5613.                          repair these upon user request.
  5614.  
  5615.                          When run, it displays a few lines of disk-status
  5616.                          information report.  This is a popular feature.  Many
  5617.                          users use CHKDSK simply because it reports how much
  5618.                          space is left on the target disk.
  5619.  
  5620.                          Usage    : CHKDSK [drive:]
  5621.                          Example  : CHKDSK  A:
  5622.                                     DOS responds with:
  5623.  
  5624.                                     362496 bytes total disk space
  5625.                                     53248 bytes in 2 hidden files
  5626.                                     294912 bytes in 16 user files
  5627.                                     14336 bytes available on disk
  5628.  
  5629.                                     655360 bytes total memory
  5630.                                     364688 bytes free
  5631.  
  5632.                          The last two lines of the above report are NOT disk
  5633.                          statistics. They show current MEMORY availability. This
  5634.                          information is included for the user's convenience.
  5635.  
  5636.  
  5637.  
  5638.             
  5639.             --------------------------------------------------------------------
  5640.             ROTOR(tm)    DOS primer:   Disk Media                Appendix E - 07
  5641.             --------------------------------------------------------------------
  5642.  
  5643.             storage
  5644.             media      : The four most common disk types are:
  5645.  
  5646.                          + 5-1/4 Double density floppies (capacity 360K)
  5647.                          + 5-1/4 High density floppies (capacity 1.2 Megabytes)
  5648.                          + 3-1/2 Double density diskettes (capacity 720K)
  5649.                          + 3-1/2 High density diskettes (capacity 1.4 Megabytes)
  5650.  
  5651.                          Each succesive disk-format represents an improvement
  5652.                          over its predecessors.  1.44 diskettes are the most
  5653.                          convenient media available today.
  5654.  
  5655.                          It is best to use disks matching the specifications of
  5656.                          your disk drives.  For instance, in a 1.44 drive, you
  5657.                          should use 1.44 diskettes, and in a 360K floppy-drive,
  5658.                          you should only insert 360K disks only.
  5659.  
  5660.                          Some drives support multiple formats.  For instance,
  5661.                          1.44 drives can handle 720K disks, and 1.2 drives
  5662.                          can read 360K floppies.
  5663.  
  5664.             disks
  5665.             protection : Some disks can only be read.  They cannot be written
  5666.                          to.  In some cases, the write-protection is permanent.
  5667.                          In others, it can be disabled/enabled at will.
  5668.  
  5669.                          In the case of 3.5 inch disks, write-protection
  5670.                          is achieved by slidding the top-left tab on the back
  5671.                          of the disk, toward the top edge.   The protection is
  5672.                          disabled by an opposite motion.
  5673.  
  5674.                          5.25 inch floppies are write-protected when the edge
  5675.                          notch is covered over by a self-adhesive tab.  To
  5676.                          remove the protection, peel off the tab.
  5677.  
  5678.                          Some 5.25 floppies have no edge-notch.  These are
  5679.                          permanently write-protected disks.  Some software
  5680.                          distributors use this type of disk in order to prevent
  5681.                          accidental erasure of their distribution disk(s).
  5682.  
  5683.             
  5684.             --------------------------------------------------------------------
  5685.             ROTOR(tm)    DOS primer:   Start-up customization    Appendix E - 08
  5686.             --------------------------------------------------------------------
  5687.  
  5688.  
  5689.             the
  5690.             start-up
  5691.             process    : When you turn your computer on, a whole range of
  5692.                          processes execute before the DOS prompt appears:
  5693.  
  5694.                          First, the intialization instructions contained in
  5695.                          the ROM BIOS chip(s) are executed.  These include
  5696.                          a 'Power-On Self-Test', diagnostic checks, and ROM-code
  5697.                          adjustments.
  5698.  
  5699.                          Then the DOS files IO.SYS and MSDOS.SYS are read into
  5700.                          memory.  The system looks for them in drive A:.  When
  5701.                          it cannot find them there, it checks the hard drive.
  5702.  
  5703.                          DOS is now in control.  It begins with a search of the
  5704.                          boot drive.  It is looking for a file named CONFIG.SYS.
  5705.                          This is a user-editable text file which is used to
  5706.                          register non-standard hardware devices.  When
  5707.                          CONFIG.SYS is found, it is read, and the instructions
  5708.                          it contains are executed.  This usually involves
  5709.                          loading into memory a variety of 'device driver' files
  5710.                          with a .SYS extension.
  5711.  
  5712.                          Next, the DOS command-processor, COMMAND.COM, is
  5713.                          loaded.  Its job is to execute user-commands entered at
  5714.                          the DOS prompt.  It takes control of the computer,
  5715.                          and proceeds to look for a special initialization file
  5716.                          called AUTOEXEC.BAT.  This is a user-editable text file
  5717.                          which contains DOS commands.  When found, the
  5718.                          instructions it contains are executed.
  5719.  
  5720.                          Finally, the DOS prompt appears, ready to serve.
  5721.  
  5722.                          The noticeable aspect af this long-winded start-up
  5723.                          process is that it includes two user-generated text
  5724.                          files, CONFIG.SYS and AUTOEXEC.BAT.  This is a valuable
  5725.                          feature, for it allows us to customize our computer.
  5726.  
  5727.             
  5728.             CONFIG.SYS : DOS knows how to operate the standard hardware
  5729.                          components of a computer, such as the memory, the disk
  5730.                          drives, and the keyboard.  But it has no clue how to
  5731.                          handle non-standard devices, such as CD-ROM drives. In
  5732.                          order to manage such a device, it requires assistance,
  5733.                          in the form of a 'installable device driver'.   This
  5734.                          driver is a file with a .SYS extension. It contains the
  5735.                          instructions necessary for good communication between
  5736.                          the device and DOS.
  5737.  
  5738.                          Device drivers are not automatically loaded into
  5739.                          memory.  DOS must be specifically instructed to do so.
  5740.                          This is done via the CONFIG.SYS file.
  5741.  
  5742.                          The CONFIG.SYS file is basically a list of 1-line
  5743.                          commands.  The format of a driver-installation command
  5744.                          is usually:   device  = <device-driver filename>
  5745.  
  5746.                          Examples  :   device  = emm40.sys
  5747.                                        device  = mouse.sys
  5748.  
  5749.                          The named driver files must be present in the boot
  5750.                          directory, where the DOS program files are located.
  5751.  
  5752.                          When DOS fails to load a device driver, due to
  5753.                          an incorrect or missing CONFIG.SYS command, the
  5754.                          corresponding harware device becomes invisible to DOS
  5755.                          and other applications.  It might as well not be there
  5756.                          at all.
  5757.  
  5758.                          Device drivers are provided by equipment manufacturers.
  5759.  
  5760.                          Some device drivers are used to change the manner in
  5761.                          which an existing hardware device is used.
  5762.                          RAMDRIVE.SYS is a good example of this capability.  It
  5763.                          takes a block of RAM memory and makes it look like a
  5764.                          new disk-drive.
  5765.  
  5766.                          Use the DOS TYPE command to examine the contents of the
  5767.                          CONFIG.SYS file:
  5768.  
  5769.                          TYPE CONFIG.SYS <enter>
  5770.                          The text displayed on the screen will resemble the
  5771.                          following example:
  5772.  
  5773.                          device  = emm40.sys   -- install EMS driver --
  5774.                          device  = mouse.sys   -- install mouse driver --
  5775.                          buffers = 40          -- memory reserved for disk IO --
  5776.                          files   = 60          -- number of open files allowed--
  5777.                          break   = off         -- disable the Ctrl-C check --
  5778.  
  5779.                          Only the first two commands are device-installation
  5780.                          commands.  The remaining three are internal
  5781.                          'configuration commands', which affect the way DOS
  5782.                          itself functions.  These are beyond the scope of this
  5783.                          text.  Please refer to your DOS manual for further
  5784.                          details.
  5785.             
  5786.             AUTOEXEC.BAT
  5787.                        :
  5788.                          This is a text file which consists of a series of
  5789.                          1-line DOS commands.  These commands are automatically
  5790.                          executed by DOS in the final stage of the start-up
  5791.                          initialization process.
  5792.  
  5793.                          The commands included in the AUTOEXEC.BAT are usually:
  5794.  
  5795.                          - hardware adjusting commands.
  5796.                            Clock-setting utilities fall in this categoty.
  5797.  
  5798.                          - TSR-loading commands.  A TSR is a 'Terminate and Stay
  5799.                            Resident' utility.  It is pre-loaded into memory for
  5800.                            quick access at a later time, usually via some clever
  5801.                            hot-key.  Pop-up calculator programs fit this bill.
  5802.  
  5803.                          - commands which customize DOS, such as PROMPT, BREAK
  5804.                            and  VERIFY.  (Look them up in your DOS manual!)
  5805.  
  5806.                          - the last command in the AUTOEXEC.BAT file is usually
  5807.                            a call to some menu program.  This is a good way
  5808.                            to hide the intimidating DOS prompt for the user.
  5809.  
  5810.                          - In addition, the file may contain REMARKS, which are
  5811.                            not commands, but simply comments directed to the
  5812.                            person reading the file.   Such REMARKS begin with
  5813.                            the word REM.
  5814.  
  5815.             sample
  5816.             AUTOEXEC.BAT
  5817.                        :
  5818.                          rem Revision History
  5819.                          rem by Michel ROBERT
  5820.                          rem 07/01/93
  5821.                          cls                         -- clear the acreen --
  5822.  
  5823.                          rem Load TSRs
  5824.                          speeder +                   -- CPU accelerator --
  5825.                          quickeys                    -- Keyboard accelerator --
  5826.                          mouse                       -- install mouse driver --
  5827.  
  5828.                          rem Customize DOS
  5829.                          break off                   -- disable Ctrl-C abort --
  5830.                          verify on                   -- for extra protection --
  5831.                          prompt $P=$g                -- prompt w/ directory --
  5832.  
  5833.                          rem Go to Menu Program
  5834.                          automenu                    -- launch menu program --
  5835.             
  5836.             it's a
  5837.             batch file :
  5838.                          The AUTOEXEC.BAT file belongs to a special category
  5839.                          of DOS files called 'batch files'. These are basically
  5840.                          little user-written programs which consist of a list of
  5841.                          commands to be executed by DOS.  When the batch
  5842.                          filename is entered at the DOS prompt, all the commands
  5843.                          in the file are executed sequentially, in the order
  5844.                          in which they appear.  Each command is processed by
  5845.                          DOS as if it had been typed-in at the prompt.
  5846.  
  5847.                          Only the AUTOEXEC.BAT file is automatically executed
  5848.                          by DOS at start-up.  All other files must be 'launched'
  5849.                          by the user.
  5850.  
  5851.  
  5852.             batch file
  5853.             example    : Lets say we have a file called  RUN.BAT which consists
  5854.                          of the following:
  5855.  
  5856.                          break off
  5857.                          C:
  5858.                          cd c:\ROTOR20
  5859.                          rotor20
  5860.  
  5861.                          To execute the file RUN.BAT, we type:  RUN <enter>
  5862.                          As a result of this entry, the following takes place:
  5863.                          - DOS break is set OFF
  5864.                          - C: becomes the current drive
  5865.                          - The working directory becomes C:\ROTOR20
  5866.                          - And our ROTOR(tm) program begins executing
  5867.  
  5868.  
  5869.                          Batch files enable us to automate frequently used
  5870.                          command-sequences.
  5871.  
  5872.                          Please note that batch file programs are not always as
  5873.                          simple our RUN.BAT example may have led you to believe.
  5874.                          They can include complex replaceable parameters,
  5875.                          labels, condition-evaluations and ERRORLEVEL tests
  5876.                          which are not quite as easily understood.  Please
  5877.                          refer to your DOS manual for further details.
  5878.  
  5879.  
  5880.             
  5881.                          The best way to create a CONFIG.SYS or AUTOEXEC.BAT
  5882.                          file is with a text-editor.  Unfortunately, DOS
  5883.                          does not include one.  The EDLIN utility which is
  5884.                          provided is an ackward command-driven line-editor.
  5885.                          It is an unfriendly and inefficient.  Do not waste
  5886.                          your time attempting to use it.
  5887.  
  5888.             the
  5889.             COPY CON
  5890.             trick      : The 'trick' described below is preferable to EDLIN,
  5891.                          particularly for short text files.  It allows you to
  5892.                          create a file by simply copying text from the screen
  5893.                          to a named file.
  5894.  
  5895.                          At the DOS prompt enter:  COPY CON <filename>
  5896.                          where <filename> is the name of the file you wish to
  5897.                          create.
  5898.  
  5899.                          Example :  COPY CON RUN.BAT <enter>
  5900.  
  5901.                          When you press <enter> the blinking cursor moves to
  5902.                          beginning of the next line, as usual.  But the DOS
  5903.                          prompt does not reappear.  At this point, you can begin
  5904.                          to type-in the text of RUN.BAT, one line at a time.  At
  5905.                          the end of each line, check for errors before pressing
  5906.                          <enter>.  Use <backspace> for corrections.  After the
  5907.                          last line, press <F6> to end the editing session and
  5908.                          return to the normal DOS prompt.
  5909.  
  5910.                          It is important to note that this trick does not allow
  5911.                          you to 'go back' and change a line which has already
  5912.                          been typed-in.  Also, it does not allow you to edit an
  5913.                          existing file.  It is not a substitute for a good
  5914.                          simple editor.
  5915.  
  5916.  
  5917.  
  5918.  
  5919.             
  5920.             --------------------------------------------------------------------
  5921.             ROTOR(tm)    DOS primer:   File Extensions           Appendix E - 09
  5922.             --------------------------------------------------------------------
  5923.  
  5924.  
  5925.                           By convention, filename extensions are file-type
  5926.                           indicators.
  5927.  
  5928.                           Essentially, one can guess at a file's purpose by
  5929.                           looking at its extension.  It is therefore a good
  5930.                           idea to be familiar with the common extensions
  5931.                           listed below:
  5932.  
  5933.             DOS
  5934.             executables
  5935.                        :
  5936.                          .COM : small executable program.
  5937.                          .EXE : large executable program.
  5938.                          .BAT : executable 'batch' file. This is, simply put,
  5939.                                 a lists of DOS commands.
  5940.  
  5941.             DOS device
  5942.             drivers    : .SYS : a device driver, linking some hardware
  5943.                                 component to DOS.
  5944.  
  5945.             text
  5946.             files      : .TXT : a text file.
  5947.                          .DOC : a documentation text file.
  5948.                          .MAN : a 'manual'.
  5949.  
  5950.                          .BAK : a 'back-up' file.
  5951.  
  5952.             data
  5953.             files      : .HLP : file containing help-screen info.
  5954.                          .CFG : file containing program-configuration data.
  5955.  
  5956.  
  5957.             image
  5958.             files      : .GIF : a GIF-formatted image.
  5959.                          .PCX : a PCX image file.
  5960.                          .CUT : a Dr.Halo image file
  5961.                          .LBM : a Deluxe Paint image file.
  5962.                          .IMG : a GEM image file.
  5963.                          .MAC : image generated by Apple MacIntosh MacPaint.
  5964.                          .MSP : image generated by Microsoft Windows Paint.
  5965.                          .BMP : a Windows BitMaPped image.
  5966.                          .TGA : a TarGA image file.
  5967.                          .TIF : a TIFF image.
  5968.  
  5969.             clip
  5970.             art files  : .ART : PFS first publisher clip-art
  5971.                          .SHP : Printmaster clips, images
  5972.                          .SDR : Printmaster clips, names
  5973.                          .DAT : PrintShop clips, images
  5974.                          .NAM : PrintShop clips, names
  5975.                          .POG : ROTOR clips, images
  5976.                          .PNM : ROTOR clips, names
  5977.  
  5978.             
  5979.             compressed
  5980.             files      : .ZIP : use PKUNZIP.EXE to decompress
  5981.                          .PAK : use PAK.EXE to decompress
  5982.                          .LZH : use LHARC.EXE to decompress
  5983.                          .ZOO : use ZOO.EXE to decompress
  5984.  
  5985.             source
  5986.             code files : .C   : a C-language source code text file.
  5987.                          .CPP : a C++  source code text file.
  5988.                          .H   : a C or C++ header file,  text.
  5989.                          .PAS : a Pascal source code text file.
  5990.                          .ASM : an assembly language source code text file.
  5991.                          .BAS : a Basic language source code text file.
  5992.                          .PKG : an ADA package, a source code text file.
  5993.  
  5994.             compiled
  5995.             code       : .BGI : a Boreland Graphics Interface Video driver.
  5996.                          .TPU : a Turbo pascal library unit.
  5997.  
  5998.  
  5999.